【问题标题】:Cordova ios with wkwebview plugin - window.open(url, "_system") doesn't work带有 wkwebview 插件的 Cordova ios - window.open(url, "_system") 不起作用
【发布时间】:2020-06-27 10:24:11
【问题描述】:

我无法在系统浏览器上打开外部链接。

Cordova 版本 9.0.0 (cordova-lib@9.0.1)

活动插件:

"cordova-ios": "^5.1.1",
"cordova-plugin-keyboard": "1.2.0",
"cordova-plugin-splashscreen": "^5.0.3",
"cordova-plugin-wkwebview-engine": "^1.2.1"

我在 config.xml

上值得注意的几行
    <access origin="*" />
    <allow-navigation href="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />

    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
    <preference name="KeyboardDisplayRequiresUserAction" value="false" />
    <preference name="BackupWebStorage" value="local"/>

我试过了:

window.open(url, "_self")
window.open(url, "_blank")
window.open(url, "_system")

但唯一在控制台中起作用并返回某些内容的函数是带有 "_self" 参数的函数。 我尝试过使用 HTML 标签:

<a href="http://url" target="_system">foo</a>

但效果并不好。

试图找出问题的根源,在我看来,ios的WebKit WebView上wkwebview插件的实现存在某个错误,可能与Apple最近为避免部署UIWebView而进行的更改有关基于应用程序和 ios sdk

【问题讨论】:

    标签: cordova ionic-framework cordova-plugins wkwebview inappbrowser


    【解决方案1】:

    我花了几个小时试图让它工作。我找到了解决 @zestia/cordova-plugin-wkwebview-engine-windowopen 插件问题的方法。

    使用以下方法添加到您的项目中:

    cordova 插件添加 @zestia/cordova-plugin-wkwebview-engine-windowopen

    【讨论】:

    • 很好,这个插件正在工作:例如你可以使用:window.open("mailto:info@st​​ackoverflow.com", '_blank');
    • 我推荐使用 _system 而不是 _blank - 这告诉操作系统您希望使用默认浏览器
    【解决方案2】:

    您可以只使用最新版本的 InAppBrowser(目前为 4.1.0),并使用“cordova.InAppBrowser.open”而不是“window.open”打开外部链接*。此外,包括“hidden=yes”,像这样(它修复了 iOS 中的一些问题):

    **cordova.InAppBrowser.open**('https://www.google.com/', '_system', '**hidden=yes**,location=yes');
    

    *它也适用于“mailto”、“tel”、“whatsapp”...对于 Android,您只需要在 config.xml 文件中允许意图并授予权限,如下所示:

    <access launch-external="yes" origin="tel:*" />
    <access launch-external="yes" origin="mailto:*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    

    最后,如果您希望应用中的所有页面加载都通过 InAppBrowser,您可以在初始化期间简单地挂钩“window.open”:

    $ionicPlatform.ready(function () {
      if (ionic.Platform.isWebView()) {
        window.open = cordova.InAppBrowser.open;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2018-11-06
      • 2020-08-24
      • 1970-01-01
      • 2023-03-08
      • 2018-07-07
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多