电话盖应用程序中的外部链接打开效果不佳

13
我有一个使用Phonegap 2.9.0的项目,并使用PhonegapBuild进行构建。在我的应用程序中,我有外部链接,希望能够在应用内或使用设备默认浏览器外部打开它们,我对这两种解决方案都可以接受。今天我的应用程序在应用内打开链接,但全屏显示,无法缩放,并且没有返回应用程序的按钮......我已经试图找出解决方法好几天了,在这里看到了相同类型的问题,但没有一个很好的工作方案。
Q1:
我想首先问一下:在文件config.xml中,preference stay-in-webview现在已被弃用,适用于Phonegap 2.3.0,是吗?所以在这方面没什么可指望的了?
Q2: 我尝试了许多关于插件InAppBrowser和window.open以及目标系统/空白/自身的文章,但对我来说没有任何区别。我仍然在应用内但没有导航按钮,我错过了什么吗?
plugin name="InAppBrowser" value="CDVInAppBrowser"

请查看我2015年的答案:https://dev59.com/71wY5IYBdhLWcg3wyqWH#32227524 - Sebastien Lorber
5个回答

19

我要先问一下:在文件config.xml中,preference stay-in-webview对于phonegap 2.3.0现在已经被弃用了,对吧?那么这里没有什么希望了吗?

没错。如果你使用的是2.9版本,甚至不用担心这个设置。

我阅读和尝试了很多关于插件InAppBrowser和window.open以及target system/blank/self的内容,但是对我来说都没有区别。我还是停留在应用内但无用,因为没有导航按钮。我错过了什么吗?

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

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

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

  4. 最后,您的项目点击看起来像这样:

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

    或者你可以将事件监听器附加到对象上,但我认为你明白我的意思。

    此外,InAppBrowser有许多事件监听器可以附加。如果您对此感兴趣,请查看文档

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

    希望这能帮到您。


1
太棒了!!这正是我昨晚想到的 :D 第一点是我的最大问题 code<script src="phonegap.js"></script>code。我通过安装Phonegap CLI环境找到了出路,然后在本地构建helloworld项目并通过xcode进行调试,我看到了我所缺少的东西。无论如何,感谢你的回答,我相信它会帮助很多人 :D - Miguel Bocquier
此外,为了解决这个问题,我要提醒大家,在查看PhoneGap文档时一定要注意选择右上角的最新版本(至少2.9.0),因为有很多变化已经被弃用。当我通过谷歌进入这个文档时,我很长时间都没有发现我的错误,完全被愚弄了!... - Miguel Bocquier
2
我按照所有步骤进行了操作,但无法解决这个问题... :( 在我的情况下,我是在按钮单击事件上打开链接的。 - User16119012
1
这个能在 iframe 中的链接上工作吗?我正在提供需要在新窗口中打开的广告,但不幸的是只能将它们放在 iframe 中。 - Mike

10

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

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

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


我不知道为什么使用inappbrowser cordova插件时window.open无法工作,但navigator.app.loadUrl可以胜任。 - Adan Archila

3

Dom在使用PhoneGap 2.9.0时的回答是可行的。

然而,正如他所说,遵循第一步是非常重要的。我正在使用https://build.phonegap.com编译我的应用程序,并且我使用了 <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 来代替第一步以使其工作。

如果所有其他方法都失败了,请尝试这个例子。它是由其中一个PhoneGap员工编写的:

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


1

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

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

教程:使用白名单示例在Phonegap Build中嵌入外部网页

如果您正在阅读本文,则可能注意到此文章针对Cordova/Phonegap/Phonegap Build的2.9.0版本。2.x已正式停用并不再得到支持。

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

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

如果您搜索了类似于外部链接无法打开之类的内容,则需要知道以下内容。在2015年9月和10月,Cordova和Phonegap进行了一些重大更改。这些更改实施了白名单

白名单意味着你必须向系统提供你计划使用的外部链接的白名单。整个系统可能会让人感到困惑。我正在撰写一篇博客文章,但在此之前,这是你需要知道的

白名单系统有三个(3)部分

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

该应用程序并不直截了当。如果你使用版本3.x,那么你不需要任何东西。如果你使用4.x或更高版本,则适用于你。如果你使用5.x,则有更多的规则适用。就像我说的,我正在撰写一篇博客文章,但这个白名单的事情非常繁琐,我需要传达这个信息。

以下是你需要开始的链接。

这里有更多的解释:
Cordova 5超时AJAX请求

此外,您还可以阅读Cordova/Phonegap新开发者的十大错误之一中的#10。

如果您很勇敢,可以阅读我的*原始*笔记,链接为Cordova/Phonegap白名单系统

0

window.open 在回调方法中似乎无法工作。(也许这是浏览器的限制?)这可能不是 OP 的问题,但我希望这个知识能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接