cordova-plugin-ionic-webview - 自定义方案不适用于 Android

Posted

技术标签:

【中文标题】cordova-plugin-ionic-webview - 自定义方案不适用于 Android【英文标题】:cordova-plugin-ionic-webview - custom scheme not working on Android 【发布时间】:2019-09-06 19:47:09 【问题描述】:

我正在开发(即将发布)适用于 iosandroid 的 Cordova 应用程序。

我正在尝试使用 cordova-plugin-ionic-webview 以使用最新的 WebView 引擎。

我可以在 iOS 上使用此插件,但在 Android 上,应用程序在启动时崩溃。

我的 CONFIG.XML:

    <allow-navigation href="cordovaios://*" />
    <allow-navigation href="cordovaandroid://*" />
    <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0">
        <variable name="ANDROID_SUPPORT_ANNOTATIONS_VERSION" value="27.+" />
    </plugin>
    <preference name="Hostname" value="my-backend-url-to-avoid-CORS.com" />
    <preference name="iosScheme" value="cordovaios" />
    <preference name="Scheme" value="cordovaandroid" />
    <preference name="ScrollEnabled" value="true" />
    <preference name="MixedContentMode" value="0" />
    <preference name="AllowBackForwardNavigationGestures" value="true" />
    <preference name="Allow3DTouchLinkPreview" value="false" />
    <preference name="WKSuspendInBackground" value="false" />
    <preference name="KeyboardAppearanceDark" value="false" />

日志:

5726-5770/mycertificate.enterprise D/SERVER:处理本地请求:cordovaandroid://my-backend-url-to-avoid-CORS.com/static/js/10.601e7973.chunk.js

5726-5773/mycertificate.enterprise E/chromium:[ERROR:render_process_host_impl.cc(4070)] 为错误的 Mojo 消息终止渲染进程:收到错误的用户消息:来源无效

5726-5773/mycertificate.enterprise E/chromium:[ERROR:bad_message.cc(23)] 为错误的 IPC 消息终止渲染器,原因 123

注意:

此配置在 iOS 上运行良好。在 Android 上,由于此主机名/来源问题,我无法使用此插件。

【问题讨论】:

这里有类似的问题(尽管在我们的例子中它不会崩溃):当我们设置Scheme 时,Hostname 在 Android 上会被忽略。我们使用cordova-plugin-ionic-webview v4.0.1 和cordova-android v8.0.0 【参考方案1】:

不幸的是,Cordova Android 平台版本和插件版本之间存在很多不匹配,这导致了一些时间的浪费。这么说,对于我遇到的类似问题,我只是修复了他们降级 Cordova 或 Android 或插件的版本(或使用插件在他们的代码示例中使用的相同版本的 android)。

【讨论】:

如果您专注于不起作用的插件,则不会。不幸的是,我已经遇到了尽可能简单的问题,比如 Cordova 更改输出文件的路径并且插件将停止工作。我的回答是让您找到问题的正确方向。【参考方案2】:

似乎不支持该自定义方案(只需尝试在source code 中找到类似的内容)。这也超出了我的理解,甚至需要注册一个自定义协议处理程序,同时永远不会离开WebView?通常的目的是:打开另一个应用程序。

<preference name="Scheme" value="https" />
<allow-navigation href="https://my-backend-url-to-avoid-CORS.com/*"/>

【讨论】:

问题是我还必须将主机名首选项设置为“my-backend-url-to-avoid-CORS.com”,这意味着对我们后端的请求将改为访问运行在设备并为应用程序提供服务,这就是我需要自定义 Origin 的原因。 @GaSacchi Hostname 配置应指示本地交付...以便即使没有自定义协议处理程序也可以将其区分开来。唯一的缺点是,不能将该(仅本地)主机名用于其他任何内容。它似乎是本地资源的网络服务器......它甚至似乎无法避免 CORS,除非它会在其他地方获取数据。 避免 CORS 的工作方式与 this 相似;也可以添加或更改标题。 是的,问题在于Hostname 首选项也会更改 window.location 对象(例如,Origin)。这意味着要求我们使用的 3rd 方服务将 CORS 的新 Origin 列入白名单。此外,如果我们需要使用外部供应商,我们也无法通过我们的服务器重定向请求。 那么,这种方式对于避免CORS问题是无效的吗?

以上是关于cordova-plugin-ionic-webview - 自定义方案不适用于 Android的主要内容,如果未能解决你的问题,请参考以下文章