谷歌 I/O 2023 介绍了不同的在 Android 应用中嵌入 Web 内容的方式,同时展示了 Android 2023 的新 Web 功能:
WebView 改动
WebView 是将 Web 内容嵌入到 Android 应用中最常用的方式,最大优势之一是其强大的 API,可用于控制和修改正在加载的 Web 内容。 WebView 的新功能如下:
弃用 X-Requested-With 标头
当用户安装并运行使用 WebView 嵌入 Web 内容的应用程序时,WebView 会将 X-Requested-With 标头添加到发送到服务器的每个请求中。此标头的值是应用程序的 APK 名称,意味着每个请求都包含有关用户正在使用 Web 内容的上下文的特定信息,并将应用程序的身份泄露给在线服务。
为了保护用户隐私,WebView 团队从所有 WebView 请求中删除了 X-Requested-With 标头。推荐的代替方法是使用新的opt-in API ,可选择性地将请求标头发送到特定来源。如果想保留现有行为,还可以注册 X-Requested-With Deprecation源试用。
WebSettingsCompat.setRequestedWithHeaderOriginAllowList(
demoWebview.getSettings(), Collections.singleton("https://example.com")
);
WebView testing
WebView 现在支持 Chrome origin trials ,origin trials 版本允许访问 Chrome 中的新功能或实验性功能。目前 origin trials 只能在桌面和移动 Chrome 上使用,但从 Chrome M110 开始,origin trials 也可以在 WebView 上使用。
安装 WebView Beta 变得更容易,可以加入 Google Play 中的 WebView Beta 测试计划,设备将自动注册。
大屏幕设备支持
WebView 现在支持图像拖放。例如,在分屏视图模式下可以将图像从 WebView 拖到不同的应用程序中。
将拖放添加到 WebView 非常容易:只需在 AndroidManifest 中声明一个 DropDataProvider。
<application...>
...
<provider
android:authorities="com.example.webviewdemo.DropDataProvider"
android:name="androidx.webkit.DropDataContentProvider"
android:exported="false"
android:grantUriPermissions="true"/>
</application>
此外,Android U 上的 Chrome 和 WebView 将全面支持 HTML 输入字段中的手写,以及用于删除文本或添加空格的输入手势。对于使用 Android T 的其他设备,也可以在开发者选项下启用 HTML 输入手写。
Jetpack JavaScript 引擎
有时可能需要在程序中运行 JavaScript 而不显示任何 Web 内容;例如跨 Web 和移动应用程序共享业务逻辑时。为了使种操作更简易,谷歌去年推出了新的 JetPack JavaScript 引擎的 alpha 版本。该库使用 Chrome 的 JavaScript 引擎 V8,让应用程序无需创建 WebView 实例即可评估 JavaScript 或 WebAssembly 代码。
Jetpack 在不同的进程中执行 JavaScript 代码,使其成为在应用程序中运行 JavaScript 的安全稳定方式,需要的资源也比 WebView 实例更少。
ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(JavaScriptEngineActivity.this);
JavaScriptIsolate jsIsolate = jsSandboxFuture.get().createIsolate();
final String code =
"function sum(a, b) { let r = a + b; return r.toString(); }; sum(3, 4)";
ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
…
Trusted Web Activity
将 Web 引入 Android 的另一种方法是使用 Trusted Web Activity (TWA)。通过使用 TWA,可以将可安装的 Web 应用程序发布到 Google Play,也可以在网络上构建一个活动,然后将其包含在 Android 应用程序中。
Trusted Web Activity 由用户的默认浏览器提供支持,浏览/交互体验和在浏览器中一模一样,除了 TWA 在 app 中全屏运行,且不显示 URL 栏。TWA 也支持设备默认浏览器的所有 Web 平台功能和 API。
还有一些 PWA 的改进和自定义标签 改进,详情可查看谷歌博客。