我试图在我的应用程序中打开一个外部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>
4条答案
按热度按时间ilmyapht1#
你可以在
href
属性中嵌入javascript代码,这样就可以了:您还必须安装InAppBrowser插件(不要被它的名字所迷惑)。
j7dteeu82#
正如你所看到的here:混合环境中的所有解决方案都不适用于iOS和cordova/phonegap较新版本。
出于这个原因,我建议使用本地插件,试试这个:
https://github.com/PaoloMessina/OpenUrlExt
此插件使用此代码为Android:
和一个面向iOS的原生Objective-C解决方案:
此插件可使用plugman安装:
而且使用起来非常简单,如github自述文件中所述
yiytaume3#
另外请记住,如果您使用
config.xml
中的allow-navigation
指令将链接的域列入白名单,window.open(url, '_system')
解决方案将不起作用。(但您可能需要使用一些链接导航,而其他一些链接作为外部链接)。在这种情况下,你可以使用一些像bit.ly这样的链接缩短服务,链接到那个url而不是原来的url。
iyfamqjs4#
Cordova 11遇到了这个问题。我不知道它是否/如何与此特定版本相关,但我的解决方案(没有
window.open
)是仔细配置两个config.xml
设置:所有应该在外部Safari中打开的链接,并且不替换WebView,
allow-intent
allow-navigation
在我的情况下,它是 * 所有链接 *,所以:
但我也需要Youtube的iframe嵌入,所以我添加了
我花了一段时间才明白
intent
≈在外部应用程序中打开(包括Safari)navigation
≈在WebView根目录或iframe中打开(this可能不是100%正确的。我主要是为未来的我写下来...)
这帮助我理解了 cordova 文件中的这条注解:
注意:
allow-navigation
优先于allow-intent
。例如,允许导航到所有带有<allow-navigation href="*" />
的URL会有“捕获”所有Intent的副作用,因此webview会导航到它们,而不是触发外部应用程序。