Appearance
快速开始
MiniBlink(以下简称 MB) 是一个完全免费、开源的 Web 渲染引擎。
完整介绍请查看官方网站。
Step 1: 获取资源
DLL 和头文件请加 QQ 群获取,群号点击这里
Step 2: 从一个简单的窗口开始
单一可执行程序
让我们从一个简单的,能打开网页的 Web 窗口开始:
在 Windows 环境下,将头文件放到当前目录,选择一个合适版本的 miniblink_****_x32.dll
放入输出目录并改名为 mb.dll
,我们这里使用 miniblink_5775_x32.dll
。假设 dll 在其它路径或者有其它名字,使用 mbSetMbMainDllPath
设置路径。
mb108 也可以使用本教程, 但是注意, mb108 还没有实现全部 API, 可能会遇到无法使用部分 api 的情况。
编写如下 C++ 代码,入口函数可以根据自己的进程类型改变,编译32位程序:
cpp
#include "mb.h"
int main() {
mbSettings* settings = new mbSettings();
memset(settings, 0, sizeof(mbSettings));
mbInit(settings);
mbWebView mbView = mbCreateWebWindow(MB_WINDOW_TYPE_POPUP, nullptr, 0, 0, 800, 600);
mbShowWindow(mbView, TRUE);
mbMoveToCenter(mbView);
mbLoadURL(mbView, "https://miniblink.net/views/doc/index.html");
mbRunMessageLoop();
mbUninit();
// 注意: 本案例聚焦 mb 的最基本使用, 并而不涉及其它内容
// 比如当关闭 mb 窗口之后不会退出进程, 如有需要可以使用 mbOnDestroy 注册一个回调来退出
return 0;
}
执行即可弹出 Web 窗口。
一些解释
MB 所有接口都是纯 C 形式导出。
mbInit
执行 MB 初始化操作,此句必须在其它所有 MB 操作前调用。初始化的配置项可在 mbInit 处详细了解。
mbCreateWebWindow
用来创建一个带真实窗口的 mbWebView
。第一个参数指定窗口类型,MB_WINDOW_TYPE_POPUP
表示创建普通窗口,MB_WINDOW_TYPE_CONTROL
表示需要嵌入到父窗口,MB_WINDOW_TYPE_TRANSPARENT
表示创建透明窗口。后面几个参数分别是父窗口的 HWND
,位置和宽高,详见 mbCreateWebWindow。
mbShowWindow
设置是否显示窗口。
mbMoveToCenter
设置窗口在父窗口或屏幕里居中。
mbLoadURL
加载 URL,仅支持网络协议路径如 https://miniblink.net
和本地文件协议路径如file:///C:/xx/xx.html
,不支持 JS 如javascript:alert(1)
等。
mbRunMessageLoop
开启 MB 的消息循环。
mbUninit
执行清理操作。
Step 3: 对页面进行控制
添加并执行一段 JS
我们已经获得了一个可以打开网页的窗口,但是 MB 更强大的地方在于提供了一批对网页操作的 API,现在我们来尝试为网页添加并执行一段 JS。
增加下列代码:
cpp
void MB_CALL_TYPE onDocumentReady(mbWebView webView, void* param, mbWebFrameHandle frameId)
{
if (mbIsMainFrame(webView, frameId)) {
mbRunJs(webView, frameId, "alert(1);", true, nullptr, nullptr, nullptr);
}
}
void helloWorld()
{
// ...
mbWebView mbView = mbCreateWebWindow(MB_WINDOW_TYPE_POPUP, nullptr, 0, 0, 800, 600);
mbOnDocumentReady(mbView, onDocumentReady, nullptr);
mbShowWindow(mbView, TRUE);
// ...
}
效果如下,可以看到已经执行了 alert(1);
:
部分解释
mbOnDocumentReady
用来设置页面 ready 事件时的回调。注意触发的时机只是页面 HTML 骨架加载完成,图片、视频、ajax 等大概率没有完成。我们往这个函数中传入了一个回调函数 onDocumentReady
。
mbIsMainFrame
用来判断是否是主 frame。假如一个网页有 iframe 等标签,这个函数可以保证我们的 JS 只在主 frame ready 时执行。
mbRunJs
用来在页面中执行一段 JS 代码。我们在这里传入了将要执行的 JS 代码 alert(1);
。假如想要在 C++ 中获取执行的结果,需要传入 mbRunJsCallback
,详情参考JS 获得数据之后如何与 C++ 通信。
接口说明
mb 有两套接口,一套以 wke
开头,另一套以 mb
开头,本指南中使用 mb
开头的接口。
接下来
现在我们已经了解了 MB 的基本操作,接下来可以继续浏览本指南,如果使用其它语言,这里有一些其它语言的绑定示例。