最新在总结项目过程用的新的技术点的过程中,发现在手机上通过webvie与js进行交互,运行没问题,然而在Android平板上运行却显示不出来,查看logcat信息报:Uncaught TypeError: Object [object Object] has no method 'xxx';于是上网搜下资料说在某些最新机型上(4.2及以上),JS回调好像不起做用了。
在android4.2以前,注入步骤如下:
- webview.getSetting().setJavaScriptEnable(true);
- class JsObject {
-
- public String toString() { return "injectedObject"; }
- }
- webView.addJavascriptInterface(new JsObject(), "injectedObject");
Android4.2及以后,注入步骤如下:
- webview.getSetting().setJavaScriptEnable(true);
- class JsObject {
- @JavascriptInterface
- public String toString() { return "injectedObject"; }
- }
- webView.addJavascriptInterface(new JsObject(), "injectedObject");
结果发现Android4.2及以后的源码在toString()方法前面增加了@JavascriptInterface,这样,这个Java对象的fields 将不允许被JS访问。所以就会报Uncaught TypeError: Object [object Object] has no method 'xxx'错误。
如何解决这个问题呢?
我个人解决方法是在调用js接口类里面的方法前面增加了注释行@JavascriptInterface,就可以解决了。这只是我个人解决方法,若有更好的解决方式,请各位大神赐教!