JSBridge的坑

1.网上搜索到的教程,一般都会教写一个setupWebViewJavascriptBridge方法,然后在页面调用这个方法,所有逻辑都写在里面。但是,逻辑太复杂,必须等操作时候才能判断需不需要调用bridge.callHandler怎么办?有办法的,top.WebViewJavascriptBridge可以替代bridge。为什么要用top,这是第二个坑。
2.iframe存在的情况下,只有父页面可以和app进行交互,子页面是不可以的。建议在setupWebViewJavascriptBridge方法定义中,第一句加上
    if(window.location.href!=top.location.href){
		top.setupWebViewJavascriptBridge(callback);
		return;
	}
那么子页面自动调用父页面的setupWebViewJavascriptBridge方法。
3.ios下调用bridge必须运行一次setupWebViewJavascriptBridge方法,安卓下需要并且最多只能init一次bridge,然后我有个登录失效退出h5需要使用bridge,所有页面都有调用。问题来了,调用前需不需要运行setupWebViewJavascriptBridge并init呢?因为有的页面自己调用过setupWebViewJavascriptBridge,有的页面没有,如果把init放页面的setupWebViewJavascriptBridge中就挺尴尬了。还是统一吧,通用js中init,页面不使用init,还有别忘记iframe。
if(window.location.href==top.location.href){
	setupWebViewJavascriptBridge(function(bridge) {
		if(isAndroid_ios()) {//android必须要bridge.init方法,ios不可以有bridge.init方法,否则不能正常和APP交互
			bridge.init(function(message, responseCallback) { });
        	}
	})
}


4.别以为测试过一些大众手机就万事OK了。部分特定手机在app使用jsbridge技术调用js方法时候,会发生bug,无法调用,最后是网上百度的解决方案
https://github.com/lzyzsd/JsBridge/issues/119
http://blog.sina.com.cn/s/blog_4e1e357d0101gju8.html
说的就是你:魅族!小米!

发布了15 篇原创文章 · 获赞 3 · 访问量 6544

猜你喜欢

转载自blog.csdn.net/yushiershi/article/details/80853843