【问题标题】:External links in phonegap app do not open wellphonegap 应用程序中的外部链接打不开
【发布时间】:2013-09-11 14:54:59
【问题描述】:

所以我有一个使用 Phonegap 2.9.0 并使用 PhonegapBuild 构建的 phonegap 项目。
我的应用程序中有外部链接,我想在应用程序中打开或在我的应用程序之外使用默认设备浏览器。我对这两种解决方案都很好。今天我的应用程序在应用程序中打开链接,但它会全屏显示,无法缩放,并且应用程序中没有返回按钮...
我试图找出一个解决方案好几天,并在这里查看相同类型的问题,但没有任何效果。

有人可以清楚地解释所有这些东西是什么,以及不同的选择/参数是什么,因为我可以说它根本不清楚/容易!

第一季度:
我首先要问:在文件 config.xml 中,对于 phonegap 2.3.0,现在不推荐使用停留在 webview 中的首选项,对吗?所以这里没什么可指望的?

第二季度: 我阅读并尝试了很多关于带有 window.open 和目标系统/空白/自我的插件 InAppBrowser,但对我来说没有区别。我留在 InApp 但没用,因为没有导航按钮。
我在这里错过了什么吗?

plugin name="InAppBrowser" value="CDVInAppBrowser"

【问题讨论】:

标签: cordova phonegap-plugins phonegap-build inappbrowser


【解决方案1】:

我首先要问:在文件 config.xml 中,对于 phonegap 2.3.0,现在不推荐使用留在 webview 中的首选项,对吗?所以这里没什么可指望的?

没错。如果您使用的是 2.9,甚至不必担心此设置

我阅读并尝试了很多关于带有 window.open 和目标系统/空白/自我的插件 InAppBrowser,但对我来说没有区别。我留在 InApp 但没用,因为没有导航按钮。我在这里遗漏了什么吗?

我也遇到了一些问题。他们的文档有点分散,需要全部阅读。这是我如何让它工作的:

  1. 确保在您想要使用 inappbrowser 的每个页面中都有 <script src="phonegap.js"></script>
  2. 您不需要在 config.xml 中包含插件标记。我很确定他们在 2.5 左右将 inappbrowser 包含在核心构建功能中。
  3. 要在 inappbrowser 中打开链接,请使用以下 javascript:

    function openURL(urlString){
        myURL = encodeURI(urlString);
        window.open(myURL, '_blank');
    }
    

    这将在 inappbrowser 中打开传递的 URL。如果您将window.open(myURL, '_blank'); 更改为window.open(myURL, '_system');,它将在系统浏览器中打开传递的URL。

  4. 最后,您的项目点击如下所示:

    <a href='#' onclick='openURL("http://www.urlyouwant")/>
    

    或者你可以将事件监听器附加到对象上,但我想你明白了。

此外,InAppBrowser 有很多可以附加到它的事件监听器。如果您对这些内容感兴趣,请查看documentation

重要!!!!不要忘记第 1 步!

希望这会有所帮助。

【讨论】:

  • 太棒了!这正是我昨晚发现的:D 第一点是我最大的问题codecode。我通过安装 Phonegap CLI 环境找到了出路,因此在使用 helloworld 项目在本地构建并通过 xcode 调试之后,我看到了我缺少的东西。无论如何,谢谢你的回答,它会帮助很多人我确定:D
  • 为了解决这个问题,我警告大家,当您查看 phonegap 文档时,请注意选择右上角的最后一个 phonegap 版本(最低 2.9.0),因为发生了很多更改并且已被弃用。当我通过谷歌进入这个文档时,我很长一段时间都没有看到我的错误,完全被欺骗了!...
  • 我按照所有步骤操作但无法解决此问题..:( 在我的情况下,我正在打开按钮单击事件的链接
  • 这适用于 iframe 内的链接吗?我正在投放需要在新窗口中打开的广告,不幸的是,我别无选择,只能将它们放在 iframe 中。
【解决方案2】:

在 Android 和 iOS 中打开 URL 有两种不同的方式。

对于 IOS 使用以下代码: window.open("http://google.com", '_system');

对于 Android,请使用以下代码: navigator.app.loadUrl("http://google.com", {openExternal : true});

【讨论】:

  • 我不知道为什么 window.open 不能与 inappbrowser cordova 插件一起使用,但 navigator.app.loadUrl 完成了这项工作。谢谢!
【解决方案3】:

Dom 的回答适用于使用 PhoneGap 2.9.0

但是,就像他说的那样,遵循第 1 步非常重要。我正在使用https://build.phonegap.com 编译我的应用程序,我使用了 &lt;script type="text/javascript" charset="utf-8" src="cordova.js"&gt;&lt;/script&gt; 让它代替步骤 #1 工作

如果一切都失败了,试试这个例子。它是由电话间隙员工之一写的:

https://github.com/amirudin/pgb-inAppBrowser

【讨论】:

    【解决方案4】:

    如果外部链接打不开,请继续阅读。

    更新:2016-03-20 我已经创建了一个关于这个主题的教程。

    Tutorial: Phonegap Build external webpage in iframe with whitelist example

    如果您正在阅读本文,您可能会注意到这篇文章引用了 Cordova/Phonegap/Phonegap Build 的 2.9.0。 2.x 已正式弃用且不再受支持。

    如果您正在使用 2.X 并且想继续开发您的应用,请升级。

    如果您使用 3.x、4.x 或 5.x 或更高版本进行编译,请继续阅读。

    如果您在 Google 上搜索过类似无法打开的外部链接,那么这就是您应该知道的。 2015 年 9 月和 10 月,Cordova 和 Phonegap 进行了一些重大更改。这些更改生效white-listing

    White-listing 意味着您*必须*向系统提供您计划使用的外部链接的白名单。整个系统可能会令人困惑。我目前正在撰写一篇博文,但在此之前您需要了解的内容

    white-list 系统包含三 (3) 个部分

    • 您的config.xml中提供的白名单
    • 您添加到config.xml 的白名单插件
    • 放置在每个网页上的 CSP(内容安全策略)(只有一次,如果您执行 SPA)

    应用程序并不简单。如果您使用的是 3.x 版本,那么您不需要任何这些。如果您使用的是 4.x 或更高版本,这适用于您。如果您使用的是 5.x,则适用的规则甚至更多。就像我说的,我正在写一篇博客文章,但是这个白名单的事情太麻烦了,我需要把这个词说出来。

    这里是您开始使用所需的链接。

    这里有更多解释:
    Timeout AJAX Requests Cordova 5

    另外,你可以阅读#10 of Top Mistakes by Developers new to Cordova/Phonegap

    如果你够勇敢,可以在Cordova/Phonegap the white-list system

    阅读我的*RAW*笔记

    【讨论】:

      【解决方案5】:

      window.open 似乎不适用于回调方法。 (也许这是浏览器的限制?)这可能不是 OP 的问题,但我希望知识可以帮助某人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多