13

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

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

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

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

plugin name="InAppBrowser" value="CDVInAppBrowser"
4

5 回答 5

19

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

这是正确的。如果您使用的是 2.9,甚至不必担心此设置

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

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

  1. 确保您<script src="phonegap.js"></script>在每个想要使用 inappbrowser 的页面中都有
  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 有很多可以附加到它的事件监听器。如果您对这些内容感兴趣,请查看文档。

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

希望这可以帮助。

于 2013-09-09T11:29:25.457 回答
10

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

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

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

于 2014-01-06T14:36:52.450 回答
3

Dom 的答案适用于使用 PhoneGap 2.9.0

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

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

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

于 2013-10-30T17:10:16.200 回答
1

如果外部链接没有打开,请阅读。

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

教程:Phonegap 使用白名单示例在 iframe 中构建外部网页

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

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

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

如果您在 Google 上搜索了诸如“外部链接无法打开”之类的内容,那么您应该知道以下内容。2015 年 9 月和 10 月,Cordova 和 Phonegap 进行了一些重大更改。这些变化付诸white-list实施

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

white-list系统由三 (3) 个部分组成

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

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

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

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

此外,您可以阅读Cordova/Phonegap 新开发人员的 #10 大错误

如果你够勇敢,你可以在Cordova/Phonegap 的白名单系统上阅读我的*RAW*笔记

于 2015-10-18T01:01:57.347 回答
0

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

于 2014-04-10T20:01:02.853 回答