如何从 PhoneGap 3.1 应用程序打开外部链接到 Safari/Chrome 浏览器?

Posted

技术标签:

【中文标题】如何从 PhoneGap 3.1 应用程序打开外部链接到 Safari/Chrome 浏览器?【英文标题】:How to open an external link from a PhoneGap 3.1 App into a Safari/Chrome browser? 【发布时间】:2013-11-12 16:25:21 【问题描述】:

我需要做的就是从应用链接打开一个外部网页链接到 iPad 的浏览器(Safari、Chrome 等)。

PhoneGap 3.1 表示可以通过一个名为 InAppBrowser 的插件来完成。好的,我安装了它并在 config.xml 中添加了以下几行

  <plugin name="InAppBrowser" value="CDVInAppBrowser" />
    <feature name="InAppBrowser">
        <param name="ios-package" value="CDVInAppBrowser" />
    </feature>
    <access origin="*"/>

然后我在我的页面中添加了一个链接,需要打开网页:-

<a class="linkexternal" href="#">asdf</a>

用下面的JS

    <script type="text/javascript">
        $(document).on('click', ".linkexternal", function (e) 
            e.preventDefault();
            //window.open('http://apache.org', '_blank', 'location=no');
                       window.open('http://apache.org', '_system', 'location=yes');

        );
    </script>

它确实打开了页面,但只是在整个屏幕上打开,没有任何控件。在旧版本的 PhoneGap 中,它在最后向我显示“完成”,因此当我按下完成按钮时,它曾经将我带回应用程序。但在这里,它将整个页面显示为全屏,返回应用程序的唯一方法是关闭应用程序。

我只需要它向我显示“完成”按钮,或者只是在外部浏览器中打开链接。

其他信息

我尝试打开这三个不同的链接作为测试;使用“_system”、“_blank”和“_self”

    <a href="#" onclick="var ref = window.open('http://google.com', '_system');">Google (System Browser)</a><br /><br />
    <a href="#" onclick="var ref = window.open('http://google.com', '_blank');">Google (InAppBrowser)</a><br /><br />
    <a href="#" onclick="var ref = window.open('http://google.com', '_self');">Google (Webview)</a>

当我用“_system”、“_blank”和“_self”测试这三个链接时,只有一个“_self”作为应用程序全屏打开,其余的给我以下错误:-

_system 链接给出了这个错误:-

2013-11-12 11:44:58.878 XYZ[2063:60b] Failed to load webpage with error: The operation couldn’t be completed. (NSURLErrorDomain error -999.)

_blank 链接给出了这个错误:-

2013-11-12 11:46:13.997 XYZ[2063:60b] CDVWebViewDelegate: Navigation started when state=1
2013-11-12 11:46:13.997 XYZ[2063:60b] Failed to load webpage with error: CDVWebViewDelegate: Navigation started when state=1
2013-11-12 11:46:13.999 XYZ[2063:60b] Resetting plugins due to page load.
2013-11-12 11:46:14.009 XYZ[2063:60b] Failed to load webpage with error: The operation couldn’t be completed. (NSURLErrorDomain error -999.)

【问题讨论】:

好吧,因为_system 将在系统浏览器(Safari 或其他)中打开它,并且由于 Safari 通常没有完成按钮,所以您不会期望看到一个。如果你想要完成按钮,你应该使用_blank。我想知道为什么它没有在 _blank 中打开 - 您是否将外部 URL 添加到白名单中?您可以从手机上的常规浏览器访问外部链接吗? 是的,我可以在浏览器中访问该链接。我在我的 config.xml 中添加了&lt;access origin="*"/&gt;,但仍然发生这种情况。 您是否使用 CLI 并在*** /www/ 文件夹中进行这些更改?您不需要编辑 config.xml - 这些工具会为您编辑它。这可能在某种程度上与您的问题相关,例如,如果您正在编辑 ios 目录中的配置,然后运行 ​​cordova build,它会用***配置文件清除您的配置文件(从而擦除我们的 access origin="*" ... 您是否正在运行命令行构建工具?你说你正在使用 phonegap (cordova) 3.1 所以你应该做类似cordova(phonegap) plugin add org.apache.cordova.inappbrowser 然后cordova buildcordova run 的事情?如果您是,那么您的所有工作都应该在*** /www/ 文件夹中完成,而不是在 /platforms/* 中。 请查看使用 CLI 的指南和我尝试解释文件系统如何工作的答案:***.com/questions/19112436/… cli 指南:cordova.apache.org/docs/en/edge/… 【参考方案1】:

请尝试;

var urlToOpen = 'http://www.google.com';
navigator.app.loadUrl(urlToOpen,  openExternal: true );

【讨论】:

【参考方案2】:

我认为问题在于 href="#"。在标签中使用这个 onClick 不会触发,我认为 NSURLErrorDomain 错误 -999 意味着浏览器无法解析“#”

【讨论】:

以上是关于如何从 PhoneGap 3.1 应用程序打开外部链接到 Safari/Chrome 浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 全屏打开第三方库的外部 URL

Phonegap ChildBrowser 通过自定义 iOS url 打开外部 URL

Phonegap / Cordova ios外部链接iframe无法在safari中打开

使用 Phonegap 在 iPad 上的 safari 中打开外部 url

PhoneGap/Cordova 打开外部链接到 Safari 而不是全屏 inApp

使用 PhoneGap 在 JQuery Mobile 的外部浏览器中无法打开链接