如何在本机 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 中的 Adobe 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*/
);
【讨论】:
谢谢,我会试试这个并给出反馈——我从现在看到的<gap:plugin name="org.li8.inappbrowser" version="0.1" />
从build.phonegap.com/plugins/673 得到的和你的<gap:plugin name="org.apache.cordova.inappbrowser">
不同——我需要看看如何插件是否适用于 adobe build 以及如何检查它是否已正确加载。 loadstop 监听器也是一个好主意,因为现在我只使用了 2 秒超时。
@TheMAn org.apache.cordova.inappbrowser
是官方插件,如果你想提到版本添加这个:<gap:plugin name="org.apache.cordova.inappbrowser" version="0.5.2" />
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>
至少这对我有用。
【讨论】:
<gap:plugin name="org.apache.cordova.inappbrowser" />
对我来说是正确的。 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 打开的本机浏览器窗口?