混合现实 WebView 插件的 API 参考(预览版)
重要
WebView2 将继续可用。 但是,HoloLens 上的 WebView2 支持已停止(无 bug 修复、内容更新或技术支持),因此我们不能保证应用程序将继续在任何长时间内工作。
适用于 Unity 的 Microsoft 混合现实 WebView 插件支持将 WebView2 功能集成到 HoloLens 2 应用中。 此适用于 Unity 的 WebView 插件通过包装 WebView2 控件、自动处理呈现以及自动将输入定向到 WebView2 控件,简化了 WebView2 功能与 HoloLens 2 应用的集成。
此插件还管理 Unity 和 WebView2 之间的互操作,通过消息和事件实现 JavaScript 与 Unity 之间的通信。
此插件公开了通过 CoreWebView2 提供的一小组功能。
HoloLens 2 上的 WebView2 和适用于 Unity 的 WebView 插件均以预览状态提供,在正式发布之前可能会发生更改。 WebView2 预览版可通过 Microsoft HoloLens 的Insider Preview 使用。 要访问此预览版,需要在 Windows 预览体验计划中注册;请参阅 Microsoft HoloLens 的 Insider Preview 中的开始接收预览体验成员版本。
WebView2 和 WebView 插件仅在运行 Windows 11 更新的 HoloLens 2 设备上受支持。 有关详细信息,请参阅更新 HoloLens 2。
有关开始使用适用于 Unity 的 WebView 插件的信息,请参阅开始使用 HoloLens 2 Unity 应用中的 WebView2。
IWebView 接口
适用于 Unity 的 WebView 插件的主接口。
public interface IWebView
{
event WebView_OnNavigated Navigated;
event WebView_OnCloseRequested WindowCloseRequested;
GameObject GameObject { get; }
Texture2D Texture { get; }
int Width { get; set; }
int Height { get; set; }
Uri Page { get; }
Task OnceCreated { get; }
void Resize(int width, int height);
void Load(Uri url);
void Dispose();
}
IWebView 委托
public delegate void WebView_OnNavigated(string path);
public delegate void WebView_OnCanGoForwardUpdated(bool value);
IWebView 事件
IWebView.Navigated 事件
WebView 引发 CoreWebView2.SourceChanged 事件时触发的事件。
示例
webView.Navigated += OnNavigated;
private void OnNavigated(string uri)
{
UrlField.text = uri;
}
IWebView.WindowCloseRequested 事件
WebView 引发 CoreWebView2.WindowCloseRequested 事件时触发的事件。
示例
webView.WindowCloseRequested += OnWindowCloseRequested;
private void OnWindowCloseRequested()
{
Destroy(GameObject);
}
IWebView 属性
IWebView.GameObject 属性
表示场景中 WebView 插件的顶级 Unity GameObject 实体。 只读。
IWebView.Texture 属性
WebView 内容呈现到的 2D Unity Texture2D
对象。 只读
IWebView.Width 属性
WebView 纹理和 WebView 控件的宽度。 Unity 场景中实例的呈现尺寸 IWebView
由 GameObject
控制。
IWebView.Height 属性
WebView 纹理和 WebView 控件的高度。 Unity 场景中实例的呈现尺寸 IWebView
由 GameObject
控制。
IWebView.Page 属性
WebView 控件当前加载或导航到的 URI。 只读
IWebView.OnceCreated 属性
当 WebView 控件已完全实例化并可供使用时执行任务。 只读
示例
webView.OnceCreated.ContinueWith((task) => {
// Finish setting up plugin.
webview.Navigated += OnNavigated;
webview.WindowCloseRequested += OnWindowCloseRequested;
Load(initialURL);
}, TaskScheduler.FromCurrentSynchronizationContext());
IWebView 方法
IWebView.Resize 方法
更改 WebView2 控件和 Texture
的大小。 有关详细信息,请参阅底层 CoreWebView2Controller.Bounds 属性。
Unity 场景中实例的呈现尺寸 IWebView
由 GameObject
控制。
示例
Resize(600, 400);
IWebView.Load 方法
导航到指定 URI。 有关详细信息,请参阅基本 CoreWebView2.Navigate 方法。
示例
Load(new Uri("https://www.microsoft.com"));
IWebView.Dispose 方法
清除与 IWebView
实例相关的资源,如内存、句柄和回调。
处理完特定的 IWebView
实例后调用此方法,以确保正确释放内部内存。 调用 Dispose
后,IWebView
实例应被视为无效。
示例
void OnDestroy()
{
webView.Dispose();
}
IWithMouseEvents 接口
支持适用于 Unity 的 WebView 插件的鼠标和指针输入。
public interface IWithMouseEvents
{
void MouseEvent(WebViewMouseEventData mouseEvent);
}
IWithMouseEvents 方法
IWithMouseEvents.MouseEvent 方法
将 WebViewMouseEventData
事件传播到 WebView 控件。 根据内部逻辑,事件会导致调用 CoreWebView2Controller.SendMouseInput 方法或 CoreWebView2Controller.SendPointerInput 方法。
示例
public void OnPointerDown(PointerEventData eventData)
{
IWithMouseEvents mouseEventsWebView = webView as IWithMouseEvents;
// Call hypothetical function which converts the event's x, y into the WebView2's coordinate space.
var hitCoord = ConvertToWebViewSpace(eventData.position.x, eventData.position.y);
WebViewMouseEventData mouseEvent = new WebViewMouseEventData
{
X = hitCoord.x,
Y = hitCoord.y,
Type = PointerEvent.PointerDown,
Button = PointerButton.Left,
TertiaryAxisDeviceType = WebViewMouseEventData.TertiaryAxisDevice.PointingDevice
};
mouseEventsWebView.MouseEvent(mouseEvent);
}
IWithPostMessage 接口
用于 Unity 代码与托管 WebView 代码之间的互操作通信的接口。
若要详细了解 WebView2 中的互操作,请参阅本机端和 Web 端代码的互操作。
public interface IWithPostMessage : IWebView
{
event WebView_OnPostMessage MessageReceived;
void PostMessage(string message, bool isJSON = false);
}
IWithPostMessage 委托
public delegate void WebView_OnPostMessage(string message);
IWithPostMessage 事件
IWithPostMessage.MessageReceived 方法
从 WebView 控件收到新的 JavaScript 消息时触发。 有关详细信息,请参阅基础 CoreWebView2.WebMessageReceived 事件。
示例
(webView as IWithPostMessage).MessageReceived += OnMessageReceived;
void OnMessageReceived(string message)
{
Debug.Log(message);
}
IWithPostMessage 方法
IWithPostMessage.PostMessage 方法
将 JavaScript 消息发送到 WebView 控件中的托管内容。 根据 isJSON
参数,这将导致调用 CoreWebView2.PostWebMessageAsString 方法或 CoreWebView2.PostWebMessageAsJson 方法。
var msg = new MyMessage("updateText", "Updated from Unity!");
(webView as IWithPostMessage).PostMessage(JsonUtility.ToJson(msg), true);
IWithBrowserHistory 接口
处理与浏览器历史记录相关的功能,例如导航到上一页。
public interface IWithBrowserHistory : IWebView
{
event WebView_OnCanGoForwardUpdated CanGoForwardUpdated;
event WebView_OnCanGoBackUpdated CanGoBackUpdated;
void GoBack();
void GoForward();
}
IWithBrowserHistory 委托
public delegate void WebView_OnCanGoBackUpdated(bool value);
public delegate void WebView_OnCloseRequested();
IWithBrowserHistory 事件
IWithBrowserHistory.CanGoForwardUpdated 事件
导航发生时触发。 如果 CoreWebView2.CanGoForward 属性为 true
,则事件委托将提供一个 true
值。
示例
(webView as IWithBrowserHistory).CanGoBackUpdated += OnCanGoBack;
void OnCanGoBack(bool value)
{
BackButton.enabled = value;
}
IWithBrowserHistory.CanGoBackUpdated 事件
导航发生时触发。 如果 CoreWebView2.CanGoBack 属性为 true
,则事件委托将提供一个 true
值。
示例
(webView as IWithBrowserHistory).CanGoForwardUpdated += OnCanGoForward;
void OnCanGoForward(bool value)
{
ForwardButton.enabled = value;
}
IWithBrowserHistory 方法
IWithBrowserHistory.GoBack 方法
导航到上一页。 有关详细信息,请参阅基本 CoreWebView2.GoBack 方法。
示例
(webView as IWithBrowserHistory).GoBack();
IWithBrowserHistory.GoForward 方法
导航到下一页。 有关详细信息,请参阅基本 CoreWebView2.GoForward 方法。
示例
(webView as IWithBrowserHistory).GoForward();