Skip to content
On this page

快速开始

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);

效果图2

部分解释

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 的基本操作,接下来可以继续浏览本指南,如果使用其它语言,这里有一些其它语言的绑定示例