在 C++Builder 中使用浏览器类 TEdgeBrowser
TEdgeBrowser 未来的发展比 TWebBrowser 更广,其内核来自 google 的开源项目,能够适应当前快速变革的浏览器语法,比公司自己开发要简单很多。微软将其打包成 WebView2 组件,C++Builder 再用 TEdgeBrowser 封装。微软也提供了 Android 和 iOS 的 Edge 组件封装,以后再试试如何使用。而 TWebBrowser 虽然可以跨平台使用,但是能够解析的内容确实有限,跟不上现在的技术更新。
在 C++Builder 10.4.2 上使用 TEdgeBrowser 比较简单,将组件拉到界面上,调用 Navigate(url) 函数就行了。
使用时需要注意的有三点,开发环境、运行动态库 webview2loader.dll、检测装载是否成功。
1,开发环境。
最简单的方法就是从微软网站上下载安装包。不执行这个步骤,即使有运行动态库,也无法成功加载 WebView2 。至于安装包究竟做了哪些操作就不了解了。安装包可以从微软网站下载,https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section,如下图红框所示。考虑到兼容老的 windows 系统,用 x86 版本会更好些。
2,运行动态库 webview2loader.dll
同样也是在微软的网站上下载,https://www.nuget.org/packages/Microsoft.Web.WebView2/1.0.902.49,如下图红框所示,(右键另存,实测要FQ,否则非常慢)
下载下来的文件后缀名为 nupkg,把后缀名改为 zip 。解压后得到下面两组共六个文件,选择 x86 目录下面的文件就行,这个版本的 build 和 runtimes 是一样的。开发时,将这个文件拷贝到工程的 win32\Debug 目录下,部署时,与 EXE 放在一起。
3,检测装载是否成功。
官网的帮助说明也提到了这一点,因为这个装载 WebView2 可能会不成功,所以必须要检测。检测代码放在 TEdgeBrowser 的 OnCreateWebViewComplete 事件中。以下代码来自 C++Builder 自带的示例 EdgeBrowser,
void __fastcall TfrmMain::EdgeBrowserCreateWebViewCompleted(TCustomEdgeBrowser* Sender, HRESULT AResult)
{
if (SUCCEEDED(AResult))
{
}
else
{
if (AResult == HResultFromWin32(ERROR_FILE_NOT_FOUND))
Application->MessageBox(L"Could not find Edge installation. "
"Do you have a version installed that''s compatible with this WebView2 SDK version?",
L"Edge initialisation error", MB_OK | MB_ICONERROR);
else if (AResult == E_FAIL)
Application->MessageBox(L"Failed to initialise Edge loader",
L"Edge initialisation error", MB_OK | MB_ICONERROR);
else
try
{
OleCheck(AResult);
}
catch (Exception &e)
{
String msg;
msg.sprintf(L"Failed to initialise Edge: %s", e.Message.c_str());
Application->MessageBox(
msg.c_str(),
L"Edge initialisation error", MB_OK | MB_ICONERROR);
}
}
}
以上,就是使用 TEdgeBrowser 需要注意的地方,官网帮助的地址,https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_TEdgeBrowser_Component_and_Changes_to_the_TWebBrowser_Component,官网上缺少第一步安装开发环境,估计作者认为大家会用 GetIt 下载安装。