最近做的一个Android项目需要用到浏览器页面跳转追踪,即在webview里打开一个页面后,页面自己的跳转导致的地址栏变化等需要记录。如果是单纯的webview那就简单了,webviewClient里就有现成的方法跟踪记录页面的变化,如
public boolean shouldOverrideUrlLoading(WebView view, String url)
public void onPageStarted(WebView view, String url, Bitmap favicon)
public void onPageFinished(WebView view, String url)
但是我这种情况比较特殊一点,项目用的phonegap搭的框架,也就是说webview和webviewclient都是固定的了,不能再重写方法,这个时候childbrowser就派上用场了。
childbrowser名为子浏览器,额,其实我也不想去费神粘贴官方的介绍了,我想呢,在已有的webview里新启动一个页面,要是用新的webview来显示页面这样是不合法的,因为Android的线程机制决定了改变UI一定要在一个线程里,所以childbrowser就像是一个外挂,在已有的机制下钻了空子,另起了一个线程显示新页面而没有被系统察觉。
以下是使用方法。
1,下载一个childbrowser文件包,里面的东西有这么三样,一是ChildBrowser.java,二是ChildBrowser.js,三是放图片的ChildBrowser文件包这个要是不显示地址栏就可以不用。
2,把com.phonegap.plugins.childBrowser这个包直接粘贴到项目src下,并在configue.xml里注册上插件名称
<plugin name="ChildBrowser" value="com.phonegap.plugins.childBrowser.ChildBrowser"/>
3,接下来就是js的使用了,在需要使用的页面里引入childbrowser.js。
<script charset="utf-8" type="text/javascript" src="childbrowser.js"></script>
4,使用childbrowser打开新页面,第二个参数表示不显示地址栏。
window.plugins.childBrowser.showWebPage(url, { showLocationBar: false});
追踪页面地址的变化
window.plugins.childBrowser.onLocationChange = function(loc){
loc就是浏览器地址栏
}
关闭childbrowser
window.plugins.childBrowser.close();
经验与不足:
childbrowser其实就是一个写好的浏览器插件,用法上与其他的plugin并没有区别,而且还可以在childbrowser.java里尽情修改,时间关系我就没细看了。有一个不足的地方,childbrowser启动后直接占了全屏了,把我的应用盖得一点都看不到,应该修改下让childbrowser与四周有些间距才好。
以上。