最近在给霍尔果斯做一个项目,项目是用h5写的,在android端使用WebView加载显示,效果还说得过去,但是太依赖网络,然而霍尔果斯那边网络都是2G网,偶尔有wifi,范围也是有限的可怜,所以,那边要求把数据放到本地。
任务来了,要把一个原先是h5的项目硬生生放到android本地去加载。。。
首先,在项目中创建一个asserts文件夹,把h5项目放到这个文件夹下面(因为android打包的时候,这个文件夹下面的东西是不会被压缩的),然后用你的WebView加载本地html首页,像这样:
webView.loadUrl("file:///android_asset/index.html");
可以显示index.html页面了,这样本以为这样就大功告成了,可是当点击跳转其他页面的时候,一点反应也没有,还有就是,如果指定的跳转链接在网上,是可以打开的,就是指定的本地跳转怎么也没有反应。。
网上有人说把跳转链接全部替换成href="file:///android_asset/index.html"这种形式,亲测没用。。
网上还有人直接为每一个html创建了一个activity,跳转的时候,去开启另一个activity,感觉很不靠谱,连试都没试,不过,这倒是给我一个提醒,如果能跳转activity的话,说明是能捕获到事件的,既然这样,我直接再调用一次loadUrl方法就好了,还有必要去重新开启一个activity吗?
那么,问题是,那个事件怎么捕获呢?
前面已经说过,只有跳转是相对路径的不能跳,所以自己拼一个http的请求,例如:我想跳转到本地的同一文件夹下的map.html文件,那么我可以构造一个http://www.map.html链接,然后去WebView拦截这一个请求,当拦截到的时候,说明我发起了跳转map.html的请求,这时候你只需要加载一下本地的map.html即可,像这样:
webView.loadUrl("file:///android_asset/map.html");
好了说到这里,问题已经基本解决了,还存留的问题就是,你必须要把h5项目中的所有相对跳转链接自己构造以便才可以。。不过总比你为每一个一面创建一个activity强点。
网友评论