浏览器嵌入组件miniblink使用笔记

miniblink龙泉寺扫地僧基于chromium内核开发的一款开源浏览器嵌入组件,相对于BlzFans早期开发的WKE组件,在HTML5支持、JS引擎速度、新Web标准兼容性上都有较大改进,而且项目较为活跃,作者还贴心地wke和cef的接口,方便了原有基于WKE项目迁移到miniblink上。近期有幸得到项目主要作者的指点,现将其用于演示功能的WKEXE项目的学习使用笔记记录如下:

在WKEXE项目中添加菜单栏

与原版WKE演示项目wkeBrowser不同,使用miniblink可以不用在自己的代码中创建程序窗口,而是通过main.cpp中调用的如下函数完成:

void RunApplication(Application* app);

由于不是我们的代码创建窗口,故无法像wkeBrowser一样在RegisterClassEx中指定菜单。要为WKEXE添加菜单栏并响应菜单消息有两种办法:

(1)像wkeBrowser一样,自己创建窗口和菜单,然后把wke相关的消息用wke的接口发过去
(2)动态创建菜单后,通过SetWindowLongPtr函数hook到WKEXE的hwnd的窗口函数处理菜单相关消息

考虑到如果自己创建窗口的话,渲染后的贴图也得自己在WKEXE中实现一遍,所以我就选择了第二种方法:

首先要获得wkexe的进程实例,在main.cpp中添加:

HINSTANCE gHinstance; //用于保存 wkexe 进程实例

在函数WinMain中把hInstance保存到全局变量gHinstance中:

gHinstance = hInstance;

在main.cpp里,添加如下全局变量:

extern HINSTANCE gHinstance; //用于保存 wkexe 进程实例
HWND gHwnd; //用于保存 wkexe 窗口句柄
WNDPROC OldProc; //用于保存 wkexe 窗口原始消息循环回调地址
wkeWebView gWkeWebView; //wkeWebView

在main.cpp的CreateWebWindow里,调用如下代码添加菜单:

HMENU hMenu = LoadMenu(gHinstance, MAKEINTRESOURCE(IDR_MENU1));
gHwnd = wkeGetHostHWND(app->window);
gWkeWebView = app->window;
SetMenu(gHwnd, hMenu);
OldProc = (WNDPROC)SetWindowLongPtr(gHwnd, GWL_WNDPROC, (LONG)NewProc);

同时在main.cpp中添加菜单消息回调代码:

//wkexe新回调函数
LRESULT CALLBACK NewProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
                case ID_EXIT: 
                    MessageBox(NULL, L"您单击了退出菜单", L"wkexe", MB_OK);
                    SendMessage(hWnd, WM_CLOSE, NULL, NULL);
                    break;
                default: 
                    break;
            }
        }
        return 0;
        //达到过滤消息后,恢复原来在OldProc中保存着的回调函数
        default:
        return CallWindowProc(OldProc, hWnd, message, wParam, lParam);
    }
}

C++调用JavaScript

和wke一样,wkexe也可以通过相同的wkeRunJS函数调用JavaScript代码,但不同的是,如果C++代码想要获得JavaScript的返回值,需要在调用的JS代码前加上return:

jsRet = wkeRunJS(gWkeWebView, "return funcforcplusplus(\"\xe4\xbd\xa0\xe5\xa5\xbd ABCDEFG\")");
jsRetStr = jsToStringW(wkeGlobalExec(gWkeWebView), jsRet);
MessageBox(hWnd, jsRetStr, L"runJS返回", 0);

JavaScript调用C++

同wke一样,JS调用C++代码也需要绑定,在RunApplication函数中CreateWebWindow之前添加如下代码:

jsBindFunction("msgBox", js_msgBox, 2);//JS调用C++

同时在app.cpp文件中添加:

//JS调用C++
jsValue JS_CALL js_msgBox(jsExecState es)
{
    const wchar_t* text = jsToStringW(es, jsArg(es, 0));
    const wchar_t* title = jsToStringW(es, jsArg(es, 1));
    MessageBox(NULL, text, title, 0);
    return jsStringW(es, L"C++返回字符串");

}

这里有个BUG需要注意,miniblink的jsToStringW函数目前只能处理JavaScript传入的字符串参数(作者将在下步更新代码时修正),如果前端msgBox函数传入的参数不是字符串类型,那么会得到空值。

附上前端测试用的HTML代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WKE Test Web Page</title>
<script>
function funcforcplusplus(instr){
    document.getElementById('result').value=instr;
    return navigator.userAgent;
    //return "JavaScript Return 返回啦";
}
</script>
</head>
<body>
<p>WKE Test Web Page</p>
<a href='#' onclick="document.getElementById('result').value=msgBox('TEST Function from JS to Cpp','来自Javascript的调用');">LINK</a>
<textarea rows='6' cols='36' id='result'>hello</textarea>
</body>
</html>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Chrome浏览器是一款由谷歌公司开发的免费网络浏览器,而易语言是一种易于学习和使用的编程语言。嵌入易语言在Chrome浏览器中意味着在浏览器中可以运行易语言编写的程序或脚本。 通过使用Chrome浏览器嵌入易语言,我们可以利用易语言的方便和易用性来开发和运行一些浏览器相关的应用程序。嵌入易语言可以帮助我们进行网络爬虫、数据采集、自动化测试等一系列任务。 在使用Chrome浏览器嵌入易语言的过程中,我们可以借助谷歌的开发者工具(DevTools)来调试和修改我们的程序。这些工具可以帮助我们查看和分析网页的元素、网络请求、JavaScript脚本等。借助这些工具,我们可以更好地了解程序的运行情况,调试和优化我们的代码。 另外,Chrome浏览器还提供了一系列的扩展和API,可以与易语言一起使用。我们可以使用这些API来操控浏览器窗口、标签页、发送网络请求等。借助这些功能,我们可以编写复杂的网络应用、浏览器插件等。 总的来说,通过嵌入易语言在Chrome浏览器中,我们可以在浏览器环境中编写和运行易语言编写的程序,充分利用Chrome浏览器的功能和易语言的简便性,来进行各种网络相关的开发和任务。 ### 回答2: Chrome浏览器是一种非常流行的网络浏览器,而易语言是一种简单易学的编程语言。嵌入易语言到Chrome浏览器中意味着我们可以使用易语言进行开发,扩展和定制Chrome浏览器,添加新的功能和修改现有功能。 通过嵌入易语言,我们可以为Chrome浏览器编写各种插件和扩展,以满足我们个人或商业需求。例如,我们可以开发一个自定义的广告拦截器插件,或者一个网页翻译插件,甚至一个网页爬虫,用于提取特定网站的信息。易语言的简单语法和易于使用的特性使得我们能够快速开发这些插件,而不需要复杂的编程知识。 此外,嵌入易语言到Chrome浏览器中还可以增强我们的浏览器安全性。我们可以使用易语言编写一个自定义的网络安全插件,对浏览器进行更加严格的安全控制,阻止恶意软件和网站的访问,确保我们的个人和机密信息的安全。 嵌入易语言到Chrome浏览器中还可以为用户提供更好的用户体验。我们可以使用易语言编写一个自定义的浏览器主题或用户界面,以使浏览器外观更加个性化。我们还可以添加一些实用的功能,如快捷键,书签管理器等,以便用户更方便地浏览网页和进行在线活动。 总之,嵌入易语言到Chrome浏览器中为我们提供了许多开发和定制的机会,使我们能够更好地满足我们的需求,并提供更好的浏览器体验。 ### 回答3: Chrome浏览器是一款广泛应用于全球的网页浏览器,而易语言是一种面向小白用户的编程语言。想要在Chrome浏览器嵌入易语言,可以通过以下步骤来实现。 首先,我们需要下载并安装一个易语言插件,例如"Chrome内核驱动扩展程序",这是一个专门为Chrome浏览器设计的插件。安装完成后,我们可以在Chrome的插件管理页面中找到这个插件并启用它。 接下来,我们可以使用易语言编写一个简单的网页应用程序。易语言提供了许多方便易用的图形化界面和函数库,使得编写网页应用变得更加简单。我们可以使用易语言提供的Web控件来实现页面的展示和交互。 在编写完网页应用程序后,我们可以将它导出为一个HTML文件。在导出HTML文件时,我们需要确保将易语言的相关资源文件也同时导出,以确保程序能够正常运行。 然后,我们可以在Chrome浏览器中打开这个导出的HTML文件。通过在浏览器中加载HTML文件,我们就可以在Chrome浏览器嵌入易语言程序了。通过该程序,我们可以实现网页的展示和交互功能。 总结起来,要在Chrome浏览器嵌入易语言,我们需要下载并安装一个易语言插件,编写一个网页应用程序并导出为HTML文件,然后在Chrome浏览器中打开该HTML文件即可实现嵌入。这样便可以在Chrome浏览器中享受到易语言的便利性和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值