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

时间:2013-06-30 23:17:28

标签: javascript jquery-mobile cordova

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

在Ripple模拟器中,或在常规桌面浏览器中,这非常有用。但是在我的Android(JB 4.2.2)上,它会在同一个窗口中打开链接。点击“返回”会将我带回应用程序,但是一切都搞砸了,应用程序无法按计划运行(脚本事件没有反应),直到物理重新加载。

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

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

5 个答案:

答案 0 :(得分:15)

在过去的几个版本中,这与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 :(得分: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;
   }
});

答案 2 :(得分:1)

有这样的一些问题,但他们都尝试使用inappbrowser。我使用了以下插件:

com.byhook.cordova.chromelauncher

一如既往地通过cli:

安装它
cordova plugin add com.byhook.cordova.chromelauncher

并添加以下JavaScript代码:

ChromeLauncher.open(url)

这将:

  1. 将您的应用设置为后台模式
  2. 打开“google chrome for android”浏览器的现有实例(根据代码,如果找不到Chrome浏览器,Google Play将被打开,但我还没有测试过这个)
  3. 向Chrome浏览器添加一个新标签,指向所需的网址

答案 3 :(得分:0)

我已经搜索了年龄以寻找正确的答案,除了已经给出的答案之外,还设法解决了这个问题。

首先,当您在较新版本的Android上使用某些方法时,旧版本的Cordova似乎会中断。将Cordova更新到最新版本会在当前项目中带来一些可能的迁移问题,但值得更新。从2.8更新到Cordova 5.0,花了我大约半小时更改代码(只需要几个修复)。之后成功重建,部署和发布。后退按钮使我的应用程序在旧版本的Cordova中崩溃。较新的版本使它像一个具有相同代码行的魅力。长话短说,更新cordova,如果需要改变几行,重建你的美丽。

希望这可以帮助你避免像我一样挣扎。

答案 4 :(得分:-4)

你可以删除     目标 属性

仅使用“rel”属性

我希望它可以解决你的问题,因为我多次面对这个问题。