最近做一个项目,需要h5页面嵌入到安卓原生app上,虽然我不太赞同这种技术方案,但还是做了,因为我认为如果不跨平台运行,最好是安卓自己开发,嵌入h5的除非需要运行在不同的系统上,比如说需要ios和window都需要运行,这时候嵌入h5是一个绝佳的方案,因为节省了很多开发成本。
下面说说这两次加载的问题吧,因为需要交互用到了jsbridge,第一次使用这个东西,抱着试试的心态看了api,引入了,挺不错的,一切都运行正常,大概h5写了40多个页面。
一个多月时间过去了,项目也快上线了,一个支付的页面,请求二维码,结果因为支付的系统不支持调用两次支付二维码,或者说是服务器压力扛不住,十分之一的概率出现加载二维码失败的问题,排查这个问题,最初打了log,发现接口总是调用两次,what's fuck ,什么鬼,难道是代码逻辑写的有问题,仔细看代码,逻辑没问题,为什么加载两次呢,换个页面打了log,惊奇的发现竟然所有页面都载入了两次,这简直是不能忍(本人有代码洁癖),
。。。。。。这中间经历很多尝试
写了几个测试的html嵌入安卓的webview中,发现不会加载两次,那么到现在怎么解决已经很清晰了,没错就是用iframe包裹我们的vue单页面应用,让原生app的webview感知不到URL的变化,完美解决。
亲测,如果只使用jsBridge的webview不初始化jsbridge是不会加载两次的,排除了url带#的问题
问题的原因大概是因为我们
1、路由变化加载了一次,
2、webview为了保持jsbridge通信正常又加载了一次,
所以是两次