Android WebView与js交互的问题记录
来源:互联网 发布:young网络手机客户端 编辑:程序博客网 时间:2024/06/10 20:57
记录下昨天项目开发中遇到的关于webView与js交互出现的那点不愉快的小小事
1.细节问题
1.贴上Html代码
/**index.html*/<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <!--Js调用Android代码--> <a onClick="window.index.onCallback"></a> </body></html>
2.有木有感觉这几句代码中有一个很大的坑
<a onClick="window.index.onCallback"></a>
- 就是这一句,刚开始就一直郁闷怎么js调用android代码,为何一直没有任何反应?targetSdkVersion版本的问题以及该注意的细节也都有兼顾到了,终究调用不起来,后来找了朋友帮忙看下,才发觉少了 “()”导致的问题,我也是醉了。要多学习咯
2.js回调的问题
1.由于最近开发的项目主页面组成是FragmentTabHost + ViewPage + Fragment,而其中的fragment中嵌入H5的界面,需求是点击H5界面的一个图标,可以跳转到主页面另一Tab对应的Fragment。
2.解决了上面关于js回调相应的问题,又出现了一问题,贴Android代码
webView.addJavascriptInterface(new onJSCallAndroid(){ @JavascriptInterface @Override public void onCallWorkcircle() { ((MainActivity)mActivity).mTabHost.setCurrentTab(1); }
3.现象:点击H5界面的图标,没有跳转到Tab1界面,通过打印log是可以确定此处的代码是执行的,接着点击Tab1,Tab1对应的Fragment出现了白屏,查看异常日志,没有异常信息。接连点击底部的Tab,页面不断切换,Tab1对应的Fragment依然白屏,最后崩溃退出,查看了日志是说空指针异常,明显这不是导致切换不响应和白屏的因素;
4.在调试的过程中,发现了日志中有如下的提醒信息(并非error级别),真是惊醒梦中人
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.08-27 18:44:02.412 3346-3557/com.hy.binbin W/System.err: at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6795)08-27 18:44:02.412 3346-3557/com.hy.binbin W/System.err: at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:938)08-27 18:44:02.412 3346-3557/com.hy.binbin W/System.err: at android.view.View.requestLayout(View.java:18864)08-27 18:44:02.412 3346-3557/com.hy.binbin W/System.err: at android.view.View.requestLayout(View.java:18864)08-27 18:44:02.412 3346-3557/com.hy.binbin W/System.err: a...
5.原来js的回调不是执行在UI线程,那么不是执行在UI线程,如何进行界面的改变。
webView.addJavascriptInterface(new onJSCallAndroid(){ @JavascriptInterface @Override public void onCallWorkcircle() { GlobalUtils.getHandler().post(new Runnable() { @Override public void run() { ((MainActivity)mActivity).mTabHost.setCurrentTab(1); } }); }
6.让js回调的代码到UI线程去执行,问题成功解决!下班了…
3.Uncaught ReferenceError异常
1.异常提示信息,非Error
"Uncaught ReferenceError: browser is not defined", source: http://www.baibai.cn/hongx/sd (144)
- 2.解决 : 这信息就告诉你,浏览器没有定义方法 , 这么说, 就可以去跟后台聊一聊,是不是忘了配置Js.
4.安全限制问题
在下面将提到的 “在js调用方法上面加注解@JavascriptInterface”的问题,如果不加的话,logcat会出现如下提示,网页无法访问到你的方法
“Uncaught TypeError: window.homepage.onCallCompleteUrl is not a function”
5.other
1.targetSdkVersion版本为17及17以上,在js调用方法上面加注解@JavascriptInterface;这是一个安全限制问题;
Android文档:警告:如果你的程序目标平台是17或者是更高,你必须要在暴露给网页可调用的方法(这个方法必须是公开的)加上@JavascriptInterface注释。如果你不这样做的话,在4.2以以后的平台上,网页无法访问到你的方法。
2.webview加载网页的时候,显示不全
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })在调用js的地方要通过Lint告知编译器,此处要访问Js方法,且启用js访问
5.总结: 注意!!! 细节!!!
- Android WebView与js交互的问题记录
- Android 与WebView中的js代码的交互记录
- Android JS与WebView交互存在的一些问题
- 记录webview与js交互
- WebView与js交互遇到的问题
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android 的webview与js交互
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android WebView与JS的交互
- Android中WebView与JS的交互
- Android WebView 与JS的数据交互
- Android WebView 与JS的数据交互
- Android中webView与JS的交互
- android WebView与JS的交互
- Android WebView 与JS的数据交互
- [Android]WebView与Js交互的学习
- 第一章 大型网站架构演化
- Zephyr内核基础
- 第二章 大型网站架构模式
- 一个类如何防止被拷贝
- 第三章 大型网站核心架构要素
- Android WebView与js交互的问题记录
- 计数排序、桶排序python实现
- 手机端访问WAMP 下局域网
- 希望我们学校的工作室搞定好
- 补间动画详解一 基类Animation
- 2016年中总结
- 仿写jquery
- Git工作区,暂存区和版本区
- mybatis事务总结