我正在使用Phonegap / Cordova v3.4开发一个应用程序,该应用程序充当包装器,在应用程序内显示外部适合移动设备的网站(即从互联网上直播)。
一切正常,加载得很好。
我的问题是我想要任何"外部链接"在该页面上打开操作系统'默认浏览器,而不是应用程序本身(即指向Facebook的链接)。
我使用InAppBrowser
代码了解本地HTML文件的标准过程:
window.open(url, '_system');
由于本地HTML文件中的页面不,_system
目标没有任何效果。
我已将phonegap.js
,cordova.js
和cordova_plugins.js
文件复制到外部网站,并在检测到正在应用中调用时加载它们,但它仍然不允许链接在OS浏览器中打开。
目前正在Android 4.3,iOS模拟器和WP8模拟器上测试HTC One Max。
GitHub为应用程序提供完整代码 - 以及它加载的外部网站上包含的javascript的Pastebin。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我发现在使用'_system'上下文打开时,我必须确定我将“http://”作为链接的一部分传递。试图打开“google.com”没有做任何事情,试图打开“http://google.com”工作。
答案 1 :(得分:0)
window.open方法由Phonegap提供的Inappbrowser提供。如果要在OS的默认浏览器中打开任何HTML页面,可以这样使用浏览器的window.location对象。
window.location.href="https://www.google.com/".
希望它可以帮到你
答案 2 :(得分:0)
我的解决方法涉及两个部分:更改" loadstart"的回调。加载新页面时由InAppBrowser发出,然后在webview的JavaScript中使用某些逻辑关闭窗口(如果它是外部链接)。
CORDOVA示例:
var host = "mobile.myapp.com";
...
function pageLoad(e){
// if the event's url doesn't contain your domain, it's an external link
if (e.url.indexOf(host) === -1 {
external = window.open(e.url, '_system');
external.addEventListener('loadstart', pageLoad);
}
}
app.addEventListener('loadstart', pageLoad)
WEBVIEW HTML:
<a onclick="externalLinkHandler(link)">
WEBVIEW JAVASCRIPT:
var externalLinkHandler = function(link) {
var newWindow = window.open(link, '_blank');
// If the window links to another page on your domain, it's not an external link
// so you can immediately close the new window you opened in your webview. The new
// external link will remain open in the system browser window opened when Cordova
// detected you were changing pages to an external link.
if (window.location.host === 'mobile.myapp.com') {
newWindow.close();
}
}
用户不应该看到快速页面打开 - 关闭,因为外部链接将在系统浏览器中打开。当他们关闭系统浏览器时,他们只会看到最后一页 - 您在此处打开的新窗口将无法保持打开状态。
注意:我在链接是外部链接的地方使用它。如果您将其硬编码为内部页面重定向,请使用hrefs。您不想为您处理的每个内部链接打开一个新窗口。如果它是外部链接,这将立即关闭新窗口。