使用Phonegap / Cordova在默认浏览器中打开链接

时间:2014-03-18 16:00:37

标签: cordova

我正在使用Phonegap / Cordova v3.4开发一个应用程序,该应用程序充当包装器,在应用程序内显示外部适合移动设备的网站(即从互联网上直播)。

一切正常,加载得很好。

我的问题是我想要任何"外部链接"在该页面上打开操作系统'默认浏览器,而不是应用程序本身(即指向Facebook的链接)。

我使用InAppBrowser代码了解本地HTML文件的标准过程:

window.open(url, '_system');

由于本地HTML文件中的页面_system目标没有任何效果。

我已将phonegap.jscordova.jscordova_plugins.js文件复制到外部网站,并在检测到正在应用中调用时加载它们,但它仍然不允许链接在OS浏览器中打开。

目前正在Android 4.3,iOS模拟器和WP8模拟器上测试HTC One Max。

GitHub为应用程序提供完整代码 - 以及它加载的外部网站上包含的javascript的Pastebin。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

我发现在使用'_system'上下文打开时,我必须确定我将“http://”作为链接的一部分传递。试图打开“google.com”没有做任何事情,试图打开“http://google.com”工作。

答案 1 :(得分:0)

window.open方法由Phonegap提供的Inappbrowser提供。如果要在OS的默认浏览器中打开任何HTML页面,可以这样使用浏览器的window.location对象。

window.location.href="https://www.google.com/".

希望它可以帮到你

答案 2 :(得分:0)

我的解决方法涉及两个部分:更改" loadstart"的回调。加载新页面时由InAppBrowser发出,然后在webview的JavaScript中使用某些逻辑关闭窗口(如果它是外部链接)。

CORDOVA示例:

var host = "mobile.myapp.com";
...
function pageLoad(e){
  // if the event's url doesn't contain your domain, it's an external link
  if (e.url.indexOf(host) === -1 {
    external = window.open(e.url, '_system');
    external.addEventListener('loadstart', pageLoad);
  }
}
app.addEventListener('loadstart', pageLoad)

WEBVIEW HTML:

<a onclick="externalLinkHandler(link)">

WEBVIEW JAVASCRIPT:

var externalLinkHandler = function(link) {
  var newWindow = window.open(link, '_blank');
  // If the window links to another page on your domain, it's not an external link
  // so you can immediately close the new window you opened in your webview. The new
  // external link will remain open in the system browser window opened when Cordova
  // detected you were changing pages to an external link.
  if (window.location.host === 'mobile.myapp.com') {
    newWindow.close();
  }
}

用户不应该看到快速页面打开 - 关闭,因为外部链接将在系统浏览器中打开。当他们关闭系统浏览器时,他们只会看到最后一页 - 您在此处打开的新窗口将无法保持打开状态。

注意:我在链接是外部链接的地方使用它。如果您将其硬编码为内部页面重定向,请使用hrefs。您不想为您处理的每个内部链接打开一个新窗口。如果它是外部链接,这将立即关闭新窗口。