这是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,并添加’location = no’等,但没有骰子.这些是从我的远程站点加载的外部页面.
点击这些链接后,它们将在同一浏览器(inappbrowser或webview)中打开并接管浏览器.我想要做的是在另一个系统浏览器(chrome,safari,无论如何)中打开这些.这将照顾我的下载问题(因为文件将希望在系统浏览器中打开,用户可以知道如何处理它们).
我试图添加一个事件监听器,并执行脚本来返回一个href的值.然后将该值用于window.open(href,’_ system’);从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]始终为空.这似乎表明我没有正确地在代码中执行某些操作:执行脚本的一部分 – 或者$(this)并不是这样的
所以,大问题 – 如何在系统浏览器中打开外部站点的链接.在我的远程站点上调用时,window.open(‘whatever.htm’,’_XXXXX’)没有区别.我使用事件侦听器在正确的轨道上吗?
解决方法
所以你想打开一个外部浏览器的链接,在InAppBrowser的远程加载站点?
在您的远程站点上,您需要在您的cordova.js文件,cordova_plugins.js文件中包含一个脚本src,并且包含您的plugins文件夹.这些文件必须托管在远程站点上.
如果我知道这是“应用程序”,我选择加载有条件的.加载后的cordova文件会抛出一系列的警报,所以你不会加载这些,除非你知道这是应用程序.
你在哪里得到这些文件?我安装了Phonegap Desktop并使用了构建文件,但是有一些引用错误.我改为使用Phonegap Build,并从APK中提取文件.将appname.apk重命名为appname.apk.zip并将需要的js文件解压缩/复制到我的服务器. *平台差异有一些问题,而cordova.js文件需要修改并有条件地加载iOS / Android.
这些是必要的,因此您可以对inappbrowser进行处理(在我的“关闭应用程序”要求 – 导航器)的情况下.
在我的远程(外部)站点(在加载了cordova / plugins后),我现在可以通过简单的调用关闭应用程序
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函数,点击并处理一个类.就像是:
$('.downloadable').click(function() { var url = $(this).attr('href'); navigator.app.loadUrl(url,{ openExternal:true }); });
以上仅适用于Android.
尝试一个香草window.open(‘http://www.whatever.com‘,’_system’)不会从我的外部网站在iOS中打开一个外部浏览器.我想到在我的外部网站内部使用另一个ref = cordova.inappbrowser.open()那不行.任何人都有什么想法?