使用Cordova/jQuery-mobile在外部设备浏览器中打开链接

9

我的应用中有很多链接。我给所有链接添加了rel='external' target='_blank'属性。

在Ripple模拟器或桌面浏览器中,这很好用。但是在我的安卓(JB 4.2.2)上,它会在同一个窗口中打开链接。点击“返回”会回到应用程序,但是一切都乱了,应用程序无法按计划工作(脚本事件不响应),直到重新加载。

如何确保链接在设备的浏览器中打开?我需要使用Cordova插件吗?

(我正在使用Cordova 2.9.0,jQuery 1.10.1,jQuery Mobile 1.3.1)

5个回答

16

在最近几个版本中,Cordova/PhoneGap一直非常善变,我认为这是由于InAppBrowser的工作引起的,这可能是你的解决方案。

对我们有效的启动外部浏览器的方法是:

window.open("http://myurl.com", '_system');

在我们的情况下,我们想要查找所有外部链接并在Safari / Chrome中启动它们(并在Angular路由器中保留内部链接)。这可能不是最优雅的解决方案,但我们现在通过捕获链接上的输入事件并像以下方式一样接管行为来实现:

        $(document).on('mousedown','a', function(e) {
            e.preventDefault();
            var elem = $(this);
            var url = elem.attr('href');
            if (url.indexOf('http://') !== -1) {
                window.open(url, '_system');
            }
        });

我希望这能对你有所帮助。


1
请查看@NicoleMcCoy下面的答案,那个更正确。在我看来,最好也修复这一个。 - ishahak

3

我遇到了Jason Farnsworth的答案在用户返回iOS应用程序后仍然触发默认操作的问题。因此,在对他的代码进行一些微调后,我得到了以下结果,并且它表现如预期。

$(document).on('click', 'a', function (e) {
   var elem = $(this);
   var url = elem.attr('href');
   if (url.indexOf('http://') !== -1) {
       e.preventDefault();
       window.open(url, '_system');
       return false;
   }
});

1

有一些类似的问题,但是它们都试图使用inappbrowser。我已经使用了以下插件:

com.byhook.cordova.chromelauncher

像往常一样,通过命令行安装它:

cordova plugin add com.byhook.cordova.chromelauncher

并添加以下JavaScript代码:

ChromeLauncher.open(url)

这将会:
  1. 将您的应用程序置于后台模式
  2. 打开现有的“谷歌Chrome浏览器(适用于Android)”实例(根据代码,如果未找到Chrome浏览器,则会打开Google Play,但我尚未测试)
  3. 向Chrome浏览器添加一个指向所需URL的新标签页

0

我花了很长时间搜寻正确答案,最终通过其他方法修复了问题,除了已经给出的答案。

首先,旧版本的Cordova在使用新版本Android上的某些方法时似乎会出现问题。将您的Cordova更新到最新版本可能会在当前项目中带来一些可能的迁移问题,但值得尝试更新。从2.8升级到Cordova 5.0,需要约半小时的代码更改(只需要进行少量修复)。重新构建、部署和成功启动后。在旧版本的Cordova中,返回按钮会使我的应用程序崩溃。新版本使它能够像魅力一样使用相同的代码行。长话短说,更新cordova,如有必要,请更改几行并重新构建您的美丽应用。

希望这能帮助您不再像我一样挣扎多日。


-3

你可以直接删除 target 属性

只使用 "rel" 属性

我希望这能解决你的问题,因为我也遇到过这个问题多次。


无法想象这也是您问题的解决方案。也许您已经用其他方法解决了它。 - user443346

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接