第一个问题 :
描述:首先说下需求,我们项目中有在本地打开一个网页的需求,这个网页中可能会内嵌一些资源,如,视屏,音频,图片什么的,并且这些资源都是相对路径(以为会是难点,结果,不用做什么处理),而且因为服务端视乎是通过不同的库查出来的,所以这个结构都是每一个资源(现在来说只有视屏和音频)使用这个新的网页,并且通过iframe内嵌到主网页,并且存在许多的超链接。
问题:因为原来没做过什么webview的开发,所以就上网上搜了一下,简单的实现,但是存在问题,就是当加载到视屏或者是音频的信息的时候,会单独使用一个新的网页来加载。
原因:通过多次debug发现,原因是因为 在设置webview的 :
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadurl(url);
return true;
}
这个方法造成的,我发现,在每次点击超链接,或者是执行iframe 引入的时候都会调用,点击超链接没事,但是iframe为什么走这个啊。。。
解决方法:改为 reture false就好了,但是注意,要做下判断。
第二个问题:
描述:需要在一个网页加载完成之后,服务端再通过jsbridge,调用一下移动端的方法,但是这个调用时机,服务端拿不到(是相对于Android来说的,ios那边没问题)这个其实不是移动端的问题,但是要配合服务端解决。
解决方法:服务端将调用的放到了 _jsBridgeReady 这个方法中,就可以在一个网页加载完成后,调用了。
第三个问题:
描述:需要在一个webview上面显示一个按钮,这个按钮,会随着网页的滑动而滑动。这个按钮是本地加的,不是在网页上面(比较坑,为什么不在网页上显示呢?整的现在各种问题)
问题:想了几个方式都不行,后来就使用监听滑动事件,然后设置给按钮,不停的跟新位置,(这是他的功能奇葩,虽然我的解决方法也不怎么样),但是。。。滑动可以无限的,但是一个网页是有顶部和底部的,如果滑到了顶部继续滑动,直接就飞了。。。。
解决方法: 使用 webView.getScrollY() 他获取的是网页的顶部和webview的顶部的距离, 也就是滑动的距离,然后,setlayout一下,就ok了,,但是发现了一个问题,如果通过脚本从底部回到顶部去,那么在4.2 的系统中不会显示(可能没有获取到这个滑动距离),5.0 6.0 系统测试可以拿到。。
最后,推荐一篇好的webview的博客 http://www.2cto.com/kf/201410/344390.html