Php-WebView 现代桌面应用开发分享

KingBes

php-webview 桌面应用开发

目录结构
.
├── os\               系统拓展目录
|   
├── php\              php环境目录
|   
├── src\              应用目录
|   └── index.php     入口文件(文件名别修改)
|
├── favicon.ico       文件图标
|
└── windows.bat       windows运行文件

更新

进入src目录

windows用户

运行命令 ..\php\php.exe ..\php\composer.phar update 更新

自己php环境 php composer update 更新

运行

进入根目录

windows用户

双击 windows.bat 或者运行命令 .\php\php.exe src/index.php 启动

自己php环境 php src/index.php 启动 (必须开启ffi拓展和phar拓展)

打包

进入根目录

运行命令 .\php\php.exe build.php 或者自己php环境运行 php build.php

编译后仅仅7M打底(由于压缩后会报毒,有7M打底编程25M打底)

效果

文件图标

提示 文件图标必须在启动目录下,不然不显示

教程

配置


use KingBes\PhpWebview\WebView;
use KingBes\PhpWebview\WindowSizeHint;

/**
 * @param string $title 窗口标题
 * @param int $width 窗口宽度
 * @param int $height 窗口高度
 * @param bool $debug debug模式 默认:false
 * __DIR__ 入口位置
 */
$webview = new WebView('Php WebView', 640, 480, true, __DIR__);

获取与设置

// 获取ffi          返回:FFI
$webview->getFFI();
// 获取webview      返回:mixed
$webview->getWebview();
// 获取窗口标题     返回:string
$webview->getTitle();
// 设置窗口标题     参数:title=string
$webview->setTitle(title:"新的标题");
// 获取窗口宽度     返回:int
$webview->getWidth();
// 设置窗口宽度     参数:width=int
$webview->setWidth(width:100);
// 获取窗口高度     返回:int
$webview->getHeight();
// 设置窗口高度     参数:height=int
$webview->setHeight(height:100);
// 获取窗口大小提示  返回:int
$webview->getHint();
// 设置窗口大小提示  参数:hint=WindowSizeHint::HINT_MIN
$webview->setHint(hint:WindowSizeHint::HINT_MIN);
// 修改窗口大小  参数 width=int height=int hint=WindowSizeHint :HINT_NONE 自由缩放 HINT_MIN 固定最小 HINT_MAX 固定最大 HINT_FIXED 禁止缩放
$webview->size(int $width, int $height, WindowSizeHint $hint);
// 判断是否debug    返回:bool
$webview->isDebug();
// 设置html内容     参数:html=string
$webview->setHTML(html:"<a>html的内容</a>");
// 绑定交互的操作    参数:name=string ,闭包函数:$req 是接收到的参数,$seq 是触发次数
$webview->bind(name:"bindName",function($seq, $req, $context){
    return ["返回内容","返回数组"];
});
// 解除绑定         参数:name=你绑定过的name名
$webview->unbind(name:"bindName");
// 设置窗口url内容  参数:url=string
$webview->navigate(url:"http://www.baidu.com");
// 运行
$webview->run();
// 销毁
$webview->destroy();

示例一 js和php交互


require_once "vendor/autoload.php";

use KingBes\PhpWebview\WebView;

// 实例
$webview = new WebView('Php WebView', 640, 480, true, __DIR__);

$html = <<<EOF
<button onclick="onBtn()">点击</button>
<script>
    function onBtn(){
        let msg = "hello php"
        btn(msg).then(function (data) {
            alert(data)
        })
    }
</script>

EOF;

// 设置HTML
$webview->setHTML($html);
// 绑定
$webview->bind('btn', function ($seq, $req, $context) {
    return $req;
});
// 运行
$webview->run();
// 销毁
$webview->destroy();

示例二 设置本地静态文件

require_once "vendor/autoload.php";

use KingBes\PhpWebview\WebView;

// 实例
$webview = new WebView('Php WebView', 640, 480, true, __DIR__);
// 本地文件`index.html`
$navigate = "file://D:\xxx\index.html";
// 设置url
$webview->navigate($navigate);
// 运行
$webview->run();
// 销毁
$webview->destroy();

示例三 弹出对话框

require_once "vendor/autoload.php";

use KingBes\PhpWebview\WebView;
use KingBes\PhpWebview\Dialog;

// 对话实例  
$dialog = new Dialog(__DIR__);

// webview实例
$webview = new WebView('Php WebView', 640, 480, true, __DIR__);
// 获取html
$html = <<<EOF
<button onclick="onMsg('hello php',2)">弹出</button>
<script>
    function onMsg(str,num){
        openMsg(str,num).then(function (data){
            console.log(data)
        })
    }
</script>

EOF;
// 设置HTML
$webview->setHTML($html);
// 绑定
$webview->bind('openMsg', function ($seq, $req, $context) use ($dialog) {
    // 弹出消息窗口
    $msg = $dialog->msg($req[0], $req[1]);
    return ["code" => 0, "msg" => $msg];
});
// 运行
$webview->run();
// 销毁
$webview->destroy();

对话框功能

配置

require_once "vendor/autoload.php";
use KingBes\PhpWebview\Dialog;

 // __DIR__ 入口位置
$dialog = new Dialog(__DIR__);

功能

// 消息框 参数:str=>string , type=>int (0~2) 返回: bool
$dialog->msg(str:"hello php",type:0);
// 输入框 返回:string
$dialog->prompt();
// 文件框 返回:string  说明:返回选择的文件路径字符串,不选择返回空字符串
$dialog->file();
// 文件夹框 参数: dirs=>string (初始化文件夹路径,为空则默认路径)  返回:string  说明:返回选择的文件夹路径字符串,不选择返回空字符串
$dialog->dir(dirs:"D:/");
// 保存文件 参数:content=>string (保存的内容) filename=>string (保存的文件名) path=>string (初始化文件夹路径,默认为空)  返回:bool
$dialog->save(content:"你好",filename:"test.txt",path:"D:/");

效果

webman-webview 套壳桌面版

码云

php-webview Linux桌面

拓展 webview.so 鸡肋版

相关技术

webview php-webview dialog static-php-cli

相关项目

图压 描述:对图片进行压缩

麻蛋编辑器 描述:一个MD编辑器

1418 7 6
7个评论

Tinywan

支持一波!

  • 暂无评论
xiaoming

强 虽然不是php的适用范围

  • 暂无评论
初心by

666

  • 暂无评论
不败少龙

6666

  • 暂无评论
掌柜

6666

  • 暂无评论
crazywhalecc

有人会把这个封装成 PHP 扩展的形式吗,也许封装成扩展可以直接依赖各个平台预分发的 .so 文件,同时可以不使用 FFI 进行调用。

  • KingBes 2024-02-21

    你可以到https://github.com/webview/webview了解一下

掌柜

使用php8.2和7.4都尝鲜失败了。


  • KingBes 2024-02-22

    要在ini配置文件开启ffi拓展

KingBes

760
积分
0
获赞数
0
粉丝数
2023-06-12 加入
×
🔝