我一直在努力打开窗口打开,在我的应用程序中使用inappbrowser。基本上,我使用phonegap作为包装来加载具有特殊应用功能的移动皮肤CMS网站。
这是index.html。我使用inappbrowser(位置设置为no)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Emerald Test App</title>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="width=device-width" />
<script src="phonegap.js"></script>
<script type='text/javascript'>
var ref = null;
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
var url = 'https://my-cms-site.com/content.aspx?page_id=31&org_id=1&app=1';
var target = '_blank';
var options = "location=no"
ref = cordova.InAppBrowser.open(url, target, options);
}
</script>
</head>
<body onload="onLoad()">
</body>
</html>
我要做的是系统浏览器中的开放链接 - 来自我通过inappbrowser加载的外部网站
我尝试使用类似文档和来自
等帖子的建议下载文件<script type="text/javascript">
window.open(url, '_system');
</script>
和_blank,并添加&#39; location = no&#39;等等,但没有骰子。这些是从我的远程站点加载的外部页面。
单击这些链接后,它们将在同一浏览器(inappbrowser或webview)中打开并接管浏览器。我要做的是在另一个系统浏览器(chrome,safari,等等)中打开它们。这将解决我的下载问题(因为文件有望在系统浏览器中打开,用户可以弄清楚如何处理它们)。
我尝试添加事件监听器,并执行脚本以返回href的值。然后将该值用于window.open(href,&#39; _system&#39;);来自index.html(而不是远程页面)。因为在索引上,我仍然会有对inappbrowser的引用。
ref.addEventListener( "loadstop", function() {
ref.executeScript(
{ code: "var gbal = null; $('a').on('click', function() { gbal = $(this).attr('href'); }); (function runIt() { return gbal })();" },
function( values ) {
if (values != null) {
//alert( values[ 0 ] );
window.open(values[0],'_system');
}
}
);
});
}
值[0]始终为空。这似乎表明我没有在代码中做正确的事情:executioncript的一部分 - 或者$(this)实际上不是这个
所以,很大的问题 - 如何在系统浏览器中打开外部网站中的链接。 window.open(&#39; whatever.htm&#39;,&#39; _XXXXX&#39;)在我的远程站点上调用时没有任何区别。我是否通过使用事件监听器走在正确的轨道上?
答案 0 :(得分:2)
在这里回答我自己的问题,所以任何面临类似情况的人都可以得到一个可靠的答案。我从其他帖子,参考资料和文档中将它拼凑在一起。
您想在InAppBrowser的远程加载网站中打开外部浏览器的链接吗?
在远程站点上,您需要在cordova.js文件,cordova_plugins.js文件中包含脚本src,并包含插件文件夹。这些文件必须托管在您的远程站点上。 如果我知道它是“应用程序”,我选择有条件地加载我的。加载后的cordova文件会抛出一系列警报,因此您不需要加载这些警报,除非您知道它是应用程序。
你从哪里获得这些文件?我安装了Phonegap Desktop并使用了构建中的文件,但是有一些参考错误。我改为使用Phonegap Build,并从APK中提取文件。将appname.apk重命名为appname.apk.zip,并将所需的js文件解压缩/复制到我的服务器。 *平台差异存在一些问题,并且需要为iOS / Android更改和有条件地加载cordova.js文件。
这些是必要的,所以你有inappbrowser的句柄(在我的“关闭app”要求 - navigator 的情况下)。
在我的远程(外部)网站上(在我加载了cordova /插件之后)我现在可以通过简单的调用关闭应用程序 navigator.app.exitApp();
在inappbrowser中加载的远程(外部)站点的页面中,我现在可以通过这样的方式打开外部页面中的链接:
<a onclick="loadUrl('http://google.com'); return false;" href="#">Test link, don't click</a>
<script type="text/javascript">
$('.closeapp').click(function() {
navigator.app.exitApp(); //this only works on Android. iOS doesn't allow for programmatic exit
});
function loadUrl(url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
}
</script>
我计划使用jquery稍微修改loadURL函数,在click上处理并查找类。类似的东西:
$('.downloadable').click(function() {
var url = $(this).attr('href');
navigator.app.loadUrl(url, { openExternal:true });
});
以上内容仅适用于Android。 尝试使用vanilla window.open('http://www.whatever.com','_ system`)不会在我的外部网站上打开iOS中的外部浏览器。我想过在我的外部网站里面使用另一个ref = cordova.inappbrowser.open()吗?这不起作用。有人有什么想法吗?