9

我的应用程序中有一堆链接。我添加rel='external' target='_blank'到所有这些。

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

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

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

4

5 回答 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');
            }
        });

我希望这对你有一点帮助。

于 2013-07-03T20:47:49.440 回答
3

在用户返回 iOS 中的应用程序后,我对 Jason Farnsworth 的回答仍然触发默认操作有疑问。因此,在对他的代码进行了一些调整后,我得到了以下结果,它的行为符合预期。

$(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;
   }
});
于 2014-07-02T18:42:31.683 回答
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 浏览器添加一个指向所需 URL 的新选项卡
于 2014-05-29T16:04:30.740 回答
0

除了已经给出的答案之外,我已经搜索了很多年的正确答案,并设法以另一种方式解决了这个问题。

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

希望这能帮助你摆脱像我一样挣扎的日子。

于 2015-06-01T07:17:31.057 回答
-3

你可以删除目标属性

仅使用“rel”属性

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

于 2013-07-01T02:52:00.657 回答