phonegap 虽然已经到了 1.6.1,可以说还有很多不完善的地方,无论是功能数量上,还是功能使用上,总觉得不顺手,好在它的东家好,将来的陆续改进会越来越好,然而在当下,还是要想出一定的办法来处理燃眉之急。
最近就遇到一个不大不小的难题:开发的“本地”应用,在打开非本地链接时,就会由浏览器打开,这还得了?让用户跳来跳去不说,更让人觉得是两张皮的拼凑品。
在网上搜了许久,有说重写覆盖webView和WebViewClient的,有说设置打开方式的,转来转去就这3篇文章:
《PhoneGap android loadUrl远程URL》
《PhoneGap – 在程序内打开网页链接》
《phonegap中http链接自动调用本地浏览器解决办法》
我不明白我的配置环境与作者差异太大,还是作者自己压根就没有试过,根据理论想法拍脑袋写出的纸代码,总之无法解决问题。只好自己动手想办法解决。
在加载本地/远程文件的时候,有了个很有意思的发现:加载的远程路径时,如果在域名后面出现/,则打开里面的链接时会以新浏览器方式打开,反之就会在当前应用中加载,哪怕你使用的标签中含有 target=”_blank”。
由此可以得知,通过加载“本地”应用file:///android_asset/www/index.html,你无论如何也不可能避免/,所以在新浏览器打开是必然的。
我本人一直是个js + as + php程序员,对于java也是一知半解,从未进行过android原生开发,并不了解它的深层机制,所以显得束手无策。
俗语说,不能在一棵树上吊死,多换几棵树试试。
安装web开发的思维,还居然真找到了一个hack办法!没错,就是 iframe
新增一个html或这page,插入一个 iframe标签并隐藏起来,预留到那里,专门用来加载指定的链接。
<a href="http://itthinker.vicp.net/readme.html" onClick="return loadingUrl(this.href)" target="_blank">外联 </a>
<div data-role="page" id="iframe">
<iframe src="#" id="iframeurl" width="240" height="480"></iframe>
</div>
<script type="text/javascript">
function loadingUrl(url)
{
$('#iframeurl').attr('src',url);
//$('#iframe').show();
location.href='#iframe';
return false;
}
</script>
测试环境: phonegap1.6.1 android 4.0.3
要想使用$就需要jquery库