在Safari( cordova )中打开外部链接

6qftjkof  于 2022-12-19  发布在  其他
关注(0)|答案(4)|浏览(188)

我试图在我的应用程序中打开一个外部URL链接,这是一个 cordova 应用程序。现在它提供了一个使用模态视图的应用程序内浏览器,但它没有后退按钮或关闭按钮。用户在点击外部链接时基本上会卡住。例如,当有人点击这个链接时,包含在“访问网站”中,应用程序内浏览器显示,网站显示良好,但是没有办法导航回应用程序,或者关闭应用程序中的浏览器。我该如何着手修复这个问题呢?

<a href="http://www.sdtaproom.com/" target="_blank">Visit Website</a>

我看到有一个解决方案,window.open(“http://stackoverflow.com“,“_system”);,但我不知道如何在href代码中实现它。
答案(已编辑):在head的script标记中添加此代码。

<script src="cordova.js"></script>
<script type="text/javascript">
window.addEventListener('load', function () {
  $(document).on('click', 'a[target="_system"],a[target="_blank"]', function (e) {
    e.preventDefault();
    var url = this.href;
    window.open(url,"_system");
  });
}, false);
</script>
ilmyapht

ilmyapht1#

你可以在href属性中嵌入javascript代码,这样就可以了:

<a href="javascript: window.open('http://www.sdtaproom.com/', '_system'); return false;">Visit Website</a>

您还必须安装InAppBrowser插件(不要被它的名字所迷惑)。

j7dteeu8

j7dteeu82#

正如你所看到的here:混合环境中的所有解决方案都不适用于iOS和cordova/phonegap较新版本。
出于这个原因,我建议使用本地插件,试试这个:
https://github.com/PaoloMessina/OpenUrlExt
此插件使用此代码为Android:

navigator.app.loadUrl(<my_url>, {openExternal : true});

和一个面向iOS的原生Objective-C解决方案:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:<my_url>]];

此插件可使用plugman安装:

cordova plugin add https://github.com/PaoloMessina/OpenUrlExt

而且使用起来非常简单,如github自述文件中所述

yiytaume

yiytaume3#

另外请记住,如果您使用config.xml中的allow-navigation指令将链接的域列入白名单window.open(url, '_system')解决方案将不起作用。(但您可能需要使用一些链接导航,而其他一些链接作为外部链接)。
在这种情况下,你可以使用一些像bit.ly这样的链接缩短服务,链接到那个url而不是原来的url。

iyfamqjs

iyfamqjs4#

Cordova 11遇到了这个问题。我不知道它是否/如何与此特定版本相关,但我的解决方案(没有window.open)是仔细配置两个config.xml设置:
所有应该在外部Safari中打开的链接,并且不替换WebView,

  • 需要allow-intent
  • 不能有allow-navigation

在我的情况下,它是 * 所有链接 *,所以:

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<!-- NOT allow-navigation="http…*" -->

但我也需要Youtube的iframe嵌入,所以我添加了

<allow-navigation href="https://www.youtube.com/embed/*" />

我花了一段时间才明白

  • intent ≈在外部应用程序中打开(包括Safari)
  • navigation ≈在WebView根目录或iframe中打开

(this可能不是100%正确的。我主要是为未来的我写下来...)
这帮助我理解了 cordova 文件中的这条注解:
注意:allow-navigation优先于allow-intent。例如,允许导航到所有带有<allow-navigation href="*" />的URL会有“捕获”所有Intent的副作用,因此webview会导航到它们,而不是触发外部应用程序。

相关问题