如何在本机 Web 浏览器中打开链接(常见建议不起作用)?

Posted

技术标签:

【中文标题】如何在本机 Web 浏览器中打开链接(常见建议不起作用)?【英文标题】:How to open links in a native web browser (common suggestion did not work)? 【发布时间】:2015-04-04 16:12:46 【问题描述】:

PhonegGap (Adobe® PhoneGap™ Build) 打开外部链接需要很长时间,并且不会在本机手机浏览器中打开。

这是我的问题。首先,如果我单击应用程序中的外部链接,则需要很长时间才能显示结果。因此,例如,如果我点击一个链接,几秒钟内什么也没有发生,那么该网站将显示在应用程序本身中。每个普通用户都会认为时间长了会有问题。看起来完整的网站在显示之前先加载,这对我的应用程序来说很好,但对外部链接来说不是。

本机浏览器问题

但是,无论如何,我并不是一个真正的朋友,不喜欢将外部网络链接打开到应用程序视图中。我喜欢在手机的原生浏览器中打开它们。

对于这个问题已经存在几个问题和建议,其中许多太旧以至于可能已经过时,其中许多甚至在堆栈溢出时。但是总结一下答案。建议不要直接打开链接,而是通过点击事件打开链接,防止默认设置,而不是使用 javascript window.open('http://www.myurl.nl', '_system');

并且还建议设置标签。 对于 _system,您将需要 inAppBrowser 插件,该插件可在 config.xml 中的 Adob​​e Build 中使用 <gap:plugin name="org.li8.inappbrowser" version="0.1" /> 提供。

因此,我的链接会在任何桌面和移动浏览器上的新窗口(不是选项卡)中打开。但是,当我将它构建为应用程序并在 android 上启动它时,它总是在应用程序中打开链接,而不是在本机浏览器中打开。无论我尝试什么设置组合。每次尝试我都看不出有什么不同。 (目前正在测试 Android,但随后将进行 Iphone 测试。

有人可以就这个问题给我一个最新的答案吗?

【问题讨论】:

【参考方案1】:

我最近使用 PhoneGap Build 开发了一个移动应用程序,因此您可以确定以下解决方案是最新的。

无论你想使用网页视图还是外部浏览器,都需要将inAppBrowser插件添加到config.xml

<gap:plugin name="org.apache.cordova.inappbrowser">

现在,如果您想打开本机(外部)网络浏览器,请使用以下命令:

window.open('http://www.google.com', '_system');

如果你想打开嵌入式浏览器使用这个:

window.open('http://www.google.com', '_blank', 'location=yes');

要管理用户操作和嵌入式浏览器出现之间的延迟,您可以使用loadstop 事件在浏览器完全加载后显示:

    Mask('show'); /* a function to show some loading animation*/
    var inAppBrowser = window.open(link, '_blank','hidden=yes');
    inAppBrowser.addEventListener('loadstop', function(event) 
        //show after complete load
        inAppBrowser.show();
        Mask('hide'); /* hide the loading mask*/

    ); 

【讨论】:

谢谢,我会试试这个并给出反馈——我从现在看到的&lt;gap:plugin name="org.li8.inappbrowser" version="0.1" /&gt; 从build.phonegap.com/plugins/673 得到的和你的&lt;gap:plugin name="org.apache.cordova.inappbrowser"&gt; 不同——我需要看看如何插件是否适用于 adobe build 以及如何检查它是否已正确加载。 loadstop 监听器也是一个好主意,因为现在我只使用了 2 秒超时。 @TheMAn org.apache.cordova.inappbrowser 是官方插件,如果你想提到版本添加这个:&lt;gap:plugin name="org.apache.cordova.inappbrowser" version="0.5.2" /&gt; Hello org.apache.cordova.inappbrowser 确实解决了这个问题,谢谢,其他插件不知何故不起作用。同时我修复了版本。好吧,因为 inAppBrowser 我不再需要外部页面的加载器,而在本机浏览器中单击后直接打开。谢谢 @TheMAN 我很高兴它对你有用。所以请接受答案。 对不起,我不知道该怎么做,需要先用谷歌搜索。现已接受。但是我可以接受它仍然无法投票,因为我有 15 个声誉,而且看起来我永远不会得到它们,因为有人总是对我的 wuestions 投反对票:D 谢谢到目前为止【参考方案2】:

在您的 config.xml 中,添加:

<gap:plugin name="org.apache.cordova.inappbrowser" />

然后对于链接,使用:

<a target="_blank" href="https://www.example.com">Example page</a>

至少这对我有用。

【讨论】:

&lt;gap:plugin name="org.apache.cordova.inappbrowser" /&gt; 对我来说是正确的。 org.li8 ... 应该做同样的事情没有用。但是“_blank”打开nativ浏览器是不正确的,这会导致不同系统(Android、ios、WinPhone)的行为不同,具体取决于访问来源。 PhoneGap 推出了一个博客来解释这个问题。即使 target="" 也不是正确的方法,您可以在 inAppBrowser 手册中找到它。唯一正确的方法是在 javascript 中调用 "_system" 和 window.open(... '_system) 以确保 inAppBrowser 打开一个原生浏览器。

以上是关于如何在本机 Web 浏览器中打开链接(常见建议不起作用)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 上的本机 Facebook 应用程序在 Safari 中打开移动 webapp 链接?

如何从 .NET 程序打开 Web 浏览器? Process.Start() 不起作用?

Cordova/iOS:如何关闭使用 InAppBrowser 打开的本机浏览器窗口?

强制链接在 webview 而不是浏览器中打开

如何在 PyQtWebEngine 中使用 target="_blank" 打开超链接?

从Web浏览器打开/关闭移动手电筒