【问题标题】:Open Links in Default Browser using Phonegap/Cordova使用 Phonegap/Cordova 在默认浏览器中打开链接
【发布时间】:2014-04-24 10:41:53
【问题描述】:

我正在使用 Phonegap/Cordova v3.4 开发一个应用程序,该应用程序充当包装器,以在应用程序中显示外部移动友好网站(即从互联网直播)。

一切正常,加载正常。

我的问题是我希望该页面上的任何“外部链接”都在操作系统的默认浏览器中打开,而不是在应用程序本身中打开(即到 Facebook 的链接)。

我知道使用 InAppBrowser 代码处理本地 HTML 文件的标准程序:

window.open(url, '_system');

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

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

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

可从 GitHub 获取应用程序的完整代码 - 以及用于加载的外部站点中包含的 javascript 的 Pastebin。

任何帮助将不胜感激。

【问题讨论】:

  • 嗨,克里斯,你解决了这个问题吗?我在我的应用中遇到了类似的问题。
  • 不,从来没有解决它...被其他项目搁置了,但又把它捡回来了...从那时起,PhoneGap 有了更新 - 可以看看再次。如果我得到任何地方,我会更新这个线程。

标签: cordova


【解决方案1】:

我发现在使用“_system”上下文打开时,我必须确保将“http://”作为链接的一部分传递。尝试打开“google.com”没有任何反应,尝试打开“http://google.com”有效。

【讨论】:

  • 抱歉,这不是这种情况下的解决方案 - 所有 URL 都被传递完整的 HTTP 前缀。
【解决方案2】:

我的解决方法涉及两个部分:更改 InAppBrowser 在新页面加载时发出的“loadstart”回调,然后在 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)

网页浏览 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();
  }
}

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

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

【讨论】:

  • 谢谢 - 不太确定这是否可以应用于我的项目 - 但也许我的项目可以重构以更好地工作......我的 Cordova 代码在 GitHub 上:tinyurl.com/ng6nwcc 和我包含的脚本在外部网站上是pastebin.com/rQXV1u8J
【解决方案3】:

window.open方法由Phonegap提供的Inappbrowser提供。如果你想在操作系统默认浏览器中打开任何HTML页面,可以通过这种方式使用浏览器的window.location对象。

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

希望对你有帮助

【讨论】:

  • 谢谢,但是执行相同的操作。它正在更改 inAppBrowser 窗口的 href - 而不是打开新的系统浏览器窗口。还有其他建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多