Unity WebView 插件⭐️(十七)超核心模块 高级功能接口—Advanced feature interfaces

举报
呆呆敲代码的小Y 发表于 2021/09/27 09:56:59 2021/09/27
【摘要】 @TOC 📢前言该文章是WebView 插件系列文章,传送门:浏览器插件3D WebView专栏上一篇文章对3D WebView 插件的 UwpWebView 做了一个详细的介绍说明那本篇文章就来介绍下 Advanced feature interfaces的说明和使用方法 🔔超核心模块 高级功能接口—Advanced feature interfaces该IWebView接口包含在所有...

@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 实现的接口,如果它支持使用本机屏幕键盘。

使用该方法可以启用系统本机键盘,不过只适用于 AndroidIOS 版本!

在这里插入图片描述
公共方法: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模式默认的模式,就来使用实例讲解该插件某些常用的功能!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200