Unity WebView 插件⭐️(十七)超核心模块 高级功能接口—Advanced feature interfaces
@TOC
📢前言
该文章是WebView 插件系列文章,传送门:浏览器插件3D WebView专栏
上一篇文章对3D WebView 插件的 UwpWebView
做了一个详细的介绍说明
那本篇文章就来介绍下 Advanced feature interfaces
的说明和使用方法
🔔超核心模块 高级功能接口—Advanced feature interfaces
该IWebView接口
包含在所有平台上实现基本的WebView
功能。
但是,您还可以使用其他接口来访问平台子集上的高级功能:
- IWithDownloads :控制文件下载
- IWithKeyDownAndUp:按键按下和抬起
- IWithMovablePointer:指针移动相关
- IWithNative2DMode:原生 2D 模式
- IWithNativeOnScreenKeyboard:是否启用本机键盘
- IWithPointerDownAndUp:控制指针按下与抬起
- IWithPopups:控制窗口弹出
- IWithSettableUserAgent:设置用户代理
该模块共有以上几种接口,每个接口的文档都列出了支持它的平台。
要使用接口,请将IWebView
实例转换为它。如果平台支持该接口,则转换将成功,您可以调用该接口的方法。
各个平台支持的接口如下:
各接口支持的实施者平台如下:
下面对几种接口中的方法做一个更详细的介绍!
🚩IWithDownloads:控制文件下载
该接口是控制文件下载的接口,如果支持文件下载,则由 webview 实现的接口。
也就是我们正常访问网页时,如果网页中有可提供下载文件的按钮接口,那该插件中也可以下载该文件!
但是需要在脚本中进行配置才可以,下面一起看一下IWithDownloads
中提供的方法
公共方法:设置下载已启用
void SetDownloadsEnabled(bool enabled)
设置是否启用文件下载。默认是禁用的。
公共活动:下载进度已更改
EventHandler<DownloadChangedEventArgs> DownloadProgressChanged
表示文件下载进度已更改。文件下载到Application.temporaryCachePath,但您可以在下载完成后将它们移动到其他位置。
Application.temporaryCachePath就是Unity引擎默认的临时数据文件夹位置,打印一下即可知道位置
DownloadProgressChanged的公共属性如下:
1.内容类型
string ContentType
Content-Type响应标头指示的 MIME 类型,或者null如果未指定内容类型。
2.文件路径
string FilePath
下载文件的完整文件路径。文件下载到Application.temporaryCachePath,但您可以在下载完成后将它们移动到其他位置。
3.ID
string Id
文件的标识符,可用于跨多个DownloadChanged事件调用跟踪文件的下载进度。
4.进度
float Progress
估计的下载进度,标准化为介于 0 和 1 之间的浮点数。请注意,并非所有平台都支持中间进度更新。
5.类型
ProgressChangeType Type
下载进度事件类型。请注意,并非所有平台都支持Updated事件类型。
6.网址
string Url
从中下载文件的 URL。
其中ProgressChangeType 中又有几种类型,分别是Failed、Finished、Started、Updated | 下载失败、下载完成、开始下载、下载中
启用 文件下载 的示例方法如下:
var webViewWithDownloads = webViewPrefab.WebView as IWithDownloads;
if (webViewWithDownloads != null) {
webViewWithDownloads.SetDownloadsEnabled(true);
webViewWithDownloads.DownloadProgressChanged += (sender, eventArgs) => {
Debug.Log(
$@"DownloadProgressChanged:
Type: {eventArgs.Type},
Url: {eventArgs.Url},
Progress: {eventArgs.Progress},
FilePath: {eventArgs.FilePath},
ContentType: {eventArgs.ContentType}"
);
if (eventArgs.Type == ProgressChangeType.Finished) {
Debug.Log("Download finished");
File.Move(eventArgs.FilePath, someOtherLocation);
}
};
}
🚩IWithKeyDownAndUp:按键按下和抬起
由 webview 实现的接口,如果它支持分离KeyDown()和KeyUp()方法。
可以用于键盘点击和抬起相关
1.按键按下
void KeyDown(string key, KeyModifier modifiers)
向 webview 发送按键按下事件。
键可以是表示 unicode 字符的单个字符(例如“A”、“b”、“?”)或JavaScript 键值(例如“ArrowUp”、“Enter”)。
2.键升
void KeyUp(string key, KeyModifier modifiers)
向 webview 发送 key up 事件。
下面是一个触发ctrl+shift+a的例子
例子
// Example of triggering ctrl+shift+a
var webViewWithKeyDownAndUp = webViewPrefab.WebView as IWithKeyDownAndUp;
if (webViewWithkeyDownAndUp != null) {
webViewWithKeyDownAndUp.KeyDown("a", KeyModifier.Control | KeyModifier.Shift);
webViewWithKeyDownAndUp.KeyUp("a", KeyModifier.Control | KeyModifier.Shift);
}
🚩IWithMovablePointer:指针移动相关
由 webview 实现的接口,如果它支持MovePointer(),可用于实现悬停或拖动交互。
公共方法:移动指针
void MovePointer(Vector2 point)
将指针移动到网页中的给定点。这可以用来触发页面中的悬停效果,也可以结合IWithPointerDownAndUp界面来实现拖动交互。
参数的 x 和 y 分量point是 0 和 1 之间的值,分别归一化为宽度和高度。例如,point.x = x in Unity units / width in Unity units。和浏览器一样,原点在左上角,y轴正方向朝下,x轴正方向朝右。
🚩IWithNative2DMode :原生 2D 模式
由 webview 实现的接口,如果它支持Native 2D Mode,这使得 3D WebView 将原生 2D webview 定位在 Unity 游戏视图的前面,而不是在 Unity 场景中将 Web 内容显示为纹理。
关于这个 原生2D模式 的具体信息在下一篇博客会对其进行一个详细的描述,以及怎样启用以及好处等等。
公共属性
1.启用 Native2DMode
bool Native2DModeEnabled { get; }
获取一个值,该值指示 webview 是否在原生 2D 模式下运行。
2.矩形
Rect Rect { get; }
获取屏幕上原生 2D webview 的矩形,以像素为单位。
3.可见的
bool Visible { get; }
获取一个值,该值指示原生 2D webview 是否可见。默认值为true.
公共方法
1.InitInNative2DMode
void InitInNative2DMode(Rect rect)
在原生 2D 模式下初始化 webview。将使用此方法代替IWebView.Init()进行初始化。
2.SetNativeZoomEnabled
void SetNativeZoomEnabled(bool enabled)
设置是否启用原生 2D webview 的双指缩放行为。默认值为true.
3.设置矩形
void SetRect(Rect rect)
在屏幕上设置原生 2D webview 的矩形,以像素为单位。
4.设置可见
void SetVisible(bool visible)
在屏幕上设置原生 2D webview 的矩形,以像素为单位。
🚩IWithNativeOnScreenKeyboard:是否启用本机键盘
由 webview 实现的接口,如果它支持使用本机屏幕键盘。
使用该方法可以启用系统本机键盘,不过只适用于 Android 和 IOS 版本!
公共方法:SetNativeOnScreenKeyboardEnabled
void SetNativeOnScreenKeyboardEnabled(bool enabled)
启用或禁用本机屏幕键盘。
🚩IWithPointerDownAndUp:指针按下与抬起
由 webview 实现的接口,如果它支持PointerDown()和PointerUp(),可用于实现拖放、双击和右键单击等功能。
提示
AndroidGeckoWebView插件不支持双击。
公共方法
1.指针按下
void PointerDown(Vector2 point, PointerOptions options)
类似PointerDown(Vector2),除了它也接受一个PointerOptions参数来修改行为(例如触发右键单击或双击)。
2.向下指针按下
void PointerDown(Vector2 point)
调度“鼠标按下”点击事件。这可以结合使用IWithMovablePointer.MovePointer并PointerUp实现拖放交互。
参数的 x 和 y 分量point是 0 和 1 之间的值,分别归一化为宽度和高度。例如,point.x = x in Unity units / width in Unity units。和浏览器一样,原点在左上角,y轴正方向朝下,x轴正方向朝右。
3.指针抬起
void PointerUp(Vector2 point, PointerOptions options)
类似PointerUp(Vector2),除了它也接受一个PointerOptions参数来修改行为(例如触发右键单击或双击)。
4.指针抬起
void PointerUp(Vector2 point)
调度“鼠标向上”点击事件。这可以结合使用PointerDown并IWithMovablePointer.MovePointer实现拖放交互。
参数的 x 和 y 分量point是 0 和 1 之间的值,分别归一化为宽度和高度。例如,point.x = x in Unity units / width in Unity units。和浏览器一样,原点在左上角,y轴正方向朝下,x轴正方向朝右。
🚩IWithPopups:控制窗口弹出
如果支持打开弹出窗口,则由 webview 实现的接口。
公共方法:设置弹出模式
void SetPopupMode(PopupMode popupMode)
设置 webview 如何处理弹出窗口。
公共活动:弹出请求
EventHandler<PopupRequestedEventArgs> PopupRequested
表示 webview 请求了一个弹出窗口。
//给网页视图添加弹出窗口例子
var webViewWithPopups = webViewPrefab.WebView as IWithPopups;
if (webViewWithPopups != null) {
webViewWithPopups.SetPopupMode(PopupMode.NotifyWithoutLoading);
webViewWithPopups.PopupRequested += (sender, eventArgs) => {
Debug.Log("Popup requested: " + eventArgs.Url);
};
}
🚩IWithSettableUserAgent:设置用户代理
如果 webview 支持更改单个 webview 实例的User-Agent,则由 webview 实现的接口。
1.设置用户代理
void SetUserAgent(string userAgent)
将 webview 实例配置为使用自定义用户代理字符串。
2.设置用户代理
void SetUserAgent(bool mobile)
默认情况下,webview 使用台式计算机的 User-Agent,以便服务器返回网站的桌面版本。如果您想要网站的移动版本,您可以使用该值调用此方法true以配置 webview 实例以使用移动设备的用户代理。
💬总结
-
本文介绍了插件的一些接口,利用好这些接口可以实现
文件下载
、鼠标拖拽
和窗口弹出
等等高级功能的实现 -
不过要注意的是一定要看看我们使用的平台版本是不是可以使用这些接口
-
因为不同的接口适用的平台不一样,不同的平台插件可用的接口都不一样,在文中已经都总结出来了!
-
下一篇再讲一下
原生2D模式
和默认的模式
,就来使用实例讲解该插件某些常用的功能!
- 点赞
- 收藏
- 关注作者
评论(0)