跳到主要内容

Microsoft Edge WebView2

Windows

Microsoft Edge WebView2 是微软推出的一项技术,它允许开发者将网页内容(包括 HTML、CSS 和 JavaScript)嵌入到本机应用程序中。这项技术的实质是一个控件,开发者可以利用它在本地应用内展示网页内容,从而为最终用户提供更加丰富和动态的应用体验。

具体来说,WebView2 提供了一个运行时环境,这个环境基于 Microsoft Edge 浏览器的核心功能,使得开发者能够利用现代网络平台的强大能力,而无需离开他们的应用程序界面。这意味着用户可以在一个统一的界面中访问和处理网页内容,同时保持与原生应用的交互性和集成度。

详情可以参考 Microsoft Edge WebView2

使用 WebView2

Player Network SDK 从 V1.23.00 版本开始支持 WebView2。若要使用相关功能,可以在下载 Player Network SDK 的时候,勾选 INTLWebView2,下载相应的插件,同时在 INTLConfig.ini 文件中打开相关配置:

[WebView]
INTL_WEBVIEW2_ENABLE=1

INTLWebViewINTLWebView2 的区别

INTLWebViewINTLWebView2 通过 INTLConfig.ini 配置的开关进行切换,两者在 Unity 和 Unreal Engine 使用的接口是一致的。

两者的主要区别在于 UserAgent 和网页与游戏使用 JavaScript 进行通信的接口,如下表所示:

INTLWebViewINTLWebView2备注
UserAgentINTLBrowser/1.23.999.529 (Windows; 11)Microsoft-WebView2 INTLBrowser/1.23.999.529 (Windows; 11)INTLWebView2 带有 Microsoft-WebView2 字样
JavaScript 通信接口window.tbs_external.nativeCallwindow.chrome.webview.postMessageJavaScript 发送信息给游戏的方式

网页通过 JavaScript 与游戏进行通信的示例

  • 在 Windows 的 WebView 打开网页的时候,通过 UserAgent 区分 INTLWebViewINTLWebView2
  • 根据 UserAgent 区分的结果调用对应的接口发送信息至游戏的接口,INTLWebView 使用 window.tbs_external.nativeCall(接受2个参数)而 INTLWebView2 使用 window.chrome.webview.postMessage(接受一个参数)
  • window.tbs_external.nativeCall 的第二个参数与 window.chrome.webview.postMessage 的第一个参数,都是发送给客户端的数据(下面以 data 代替),为 JSON 格式
  • data(JSON 格式)中含有以 INTLMethod 为键的键值对,用以表示需要客户端进行的操作
  • window.tbs_external.nativeCall 的第一个参数与 data(JSON 格式)中的键为 INTLMethod 对应的值一致

以下是网页 JavaScript 的示例:


<script>
function isWindowsPC(){
var ua = navigator.userAgent;
return SubStrSearch('Windows;', ua) != -1 &&
SubStrSearch('INTLBrowser', ua) != -1;
}

function INTLCallNative(data) {
if (isWindowsPC()) {
var agent = navigator.userAgent;
if (agent.indexOf("Microsoft-WebView2") >= 0
&& agent.indexOf("INTLBrowser/") >= 0){
//使用的是 INTLWebView2
window.chrome.webview.postMessage(data);
} else {
//使用的是 INTLWebView
var obj = JSON.parse(data);
window.tbs_external.nativeCall(obj['INTLMethod'], [data]);
}
}
var SetFullScreen = '{"INTLMethod":"setFullScreen","isFullScreen":true}';
</script>

<input type="button" value="Set WebView full screen" onclick="INTLCallNative(SetFullScreen)" />

更多示例,请参见 INTLWebViewSample.html

网页端获取 GuestId

INTLWebView

网页发送请求和接收 GuestId:

<script>
window.tbs_external.nativeCallEx("getGuestId", ['{"INTLMethod":"getGuestId"}'], function (res) { alert(res); });
</script>

INTLWebView2

  • 网页发送请求:
<script>
window.chrome.webview.postMessage('{"INTLMethod":"getGuestId"}');
</script>
  • 网页接收 GuestId:

<script>
var agent = navigator.userAgent;
if (agent.indexOf("Microsoft-WebView2") >= 0
&& agent.indexOf(" INTLBrowser/") >= 0) {
window.chrome.webview.addEventListener('message', arg => {
var obj = JSON.parse(arg.data);
var method = obj['INTLMethod'];
if ('getGuestId'.toLowerCase() == method.toLowerCase()){
var guestID = obj['guestId'];
alert(guestID);
}
});
}
</script>

更多示例,请参见 INTLWebViewSample.html

INTLWebView2 系统要求

支持以下编程环境:

  • Win32 C/C++
  • .NET Framework 4.6.2 或更高版本
  • .NET Core 3.1 或更高版本
  • .NET 5 或更高版本
  • WinUI 2.0
  • WinUI 3.0

WebView2 应用可以在以下版本的 Windows 上运行:

  • Windows 11
  • Windows 10
  • Windows 10 IoT 企业版 LTSC x32 2019
  • Windows 10 IoT 企业版 LTSC x64 2019
  • Windows 10 IoT 企业版 21h1 x64
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016

更多详情,请参见 受支持的平台

判断用户 PC 上是否已存在 WebView2 运行时

由于 INTLWebView 依赖 Microsoft WebView2,用 INTLWebView 发行游戏的时候需确保用户 PC 上是否已存在 WebView2 运行时:

方法1:检查注册表

若用户电脑上安装了 WebView2 运行时,则在下面列举的两个注册表位置中,至少有一个位置存在键 pv (REG_SZ),并且值必须大于 0.0.0.0。如果这两个位置下都不存在键 pv (REG_SZ),或者只有一个位置存在 pv (REG_SZ),但其值为 null、空字符串或 0.0.0.0,则表示客户端上未安装 WebView2 运行时,可以通过检查 pv (REG_SZ) 以检测是否已安装 WebView2 运行时,并获取 WebView2 运行时的版本。

在 64-位 Windows 上检查的两个注册表位置:


HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}

HKEY_CURRENT_USER\Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}

方法2:通过代码判断

以下接口返回 WebView2 运行时或 Microsoft Edge 预览版(Beta、Dev、Canary)的版本信息,可用来判断用户 PC 上是否已存在 WebView2 运行环境。有关 GetAvailableCoreWebView2BrowserVersionString 的详情请参见 Win32 应用中的 WebView2 入门


#include<WebView2.h>

bool IsWebViewRuntimeAvailable() {
LPWSTR version_info;
GetAvailableCoreWebView2BrowserVersionString(nullptr, &version_info);
return version_info != nullptr;
}

详情请参见 检测是否已安装合适的 WebView2 运行时

WebView2 运行时部署

注意

以下内容引用自 Microsoft Edge WebView2 官网,要了解更多关于 WebView2 运行时部署的信息,请参见 分发应用和 WebView2 运行时

如果业务选择接入 WebView2 的方案,游戏包安装过程中需要帮助或引导用户安装 WebView2 运行时环境,以保证 WebView2 模式场景工作正常。根据下列两种方式分发并更新 WebView2 运行时:

方法1:Evergreen Runtime 分发模式

Evergreen Runtime 分发模式 下,WebView2 运行时不随应用一起打包,而是使用联机引导程序或脱机安装程序安装到客户端上。 WebView2 运行时会自动在客户端计算机上更新,游戏无需手动更新WebView2运行时,Microsoft官方建议使用 Evergreen 分发模式。

方法2:固定版本运行时分发模式

固定版本运行时分发模式 下,下载特定版本的 WebView2 运行时,并将其与 WebView2 应用一起打包到应用包中。 随应用一起打包的 WebView2 运行时仅由 WebView2 应用使用,而不能由客户端计算机上的任何其他应用使用。

更多详情,下载 WebView2 运行时