也谈Android中WebView与HTML的JavaScript交互

简介:

   这两天一直在研究WebView加载html文件,并显示服务器端数据得问题,其中很关键的一个问题就是需要在java代码中将从服务器端接收到的数据,传递到WebView的HTML页面中,并通过JavaScript函数来将数据显示出来。在查看了Android的API文档以后,发现WebView有两种方式可以和JavaScript做交互。

  方式一:

 
 
  1. //先加载html文件,然后调用html文件中的javascript函数 
  2. webView.loadUrl("file:///android_asset/show.html"); 
  3. webView.loadUrl("javascript:pushNewsData('"+strHtml+"')");    

   方式二:

 
 
  1. //在Java代码中添加javascript的接口,然后在html文件中调用java中的对象  
  2. webView.addJavascriptInterface(strHtml, "MyContent"); 


HTML文件 

 
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3.     <head> 
  4.         <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" /> 
  5.     </head> 
  6.      
  7.     <body id="myBody"> 
  8.     </body> 
  9.     <script> 
  10. funcion pushNewsDate(dataText){
  11. document.write(dataText);
  12. }
  13.         window.MyContent; 
  14.     </script> 
  15. </html> 

  最后我使用的是第二种方式来显示从服务器端得到的数据。也许有朋友会问,为什么不是用第一种方式,这样直接调用不是很好么,为什么非得兜个圈子,先向WebView发送请求,然后WebView再发送数据到html页面?
最初,我也觉得第一种方法很直观,使用起来也很省事,但是在debug的过程中才发现这种调用方式是存在隐患的,什么隐患呢?因为我是向html页面传送从服务器接收到的数据,这其中有个很难控制的地方——服务器端发送的数据是什么样子的?里面有没有非法字符?有没有特殊字符?发现这个隐患也是很偶然的,因为之前显示是正常的,可是突然就出现了一次不显示任何内容的情况,debug时跟踪了所有地方,也没有发现代码中出现问题,最后又将从服务器端接收到的数据放到HTML页面中对JavaScript做debug,就这样折腾了3个多小时,最后才发现是在使用方式一得情况下,将数据当做参数传入到javascript函数中时,javascript对参数得值不识别造成的,即javascript认为传入的参数的值是错误的。当换成第二种方式后,这个问题就不存在了,无论是什么样的数据,都可以在html页面中正常显示。
  在第二种方式中,本人是将一个字符串“strHtml”当做对象传入到html页面中,如果大家希望传入其他内容也是可以的,比如传入一个class

 
 
  1. public class HtmlShow{ 
  2.      
  3.     private String str; 
  4.      
  5.     public String getContent(){ 
  6.      
  7.         str = "initialize in java"
  8.         return  str; 
  9.     } 
  10.  
  11. HtmlShow hs = new HtmlShow(); 
  12. webView.addJavascriptInterface(hs, "MyContent"); 

  在Html中的调用方式如下

 
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  2. <html>   
  3.     <head>  
  4.         <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />  
  5.     </head>  
  6.       
  7.     <body id="myBody">  
  8.     </body>  
  9.     <script>  
  10.         window.MyContent.getContent();  
  11.     </script>  
  12. </html>  









本文转自 sw840227 51CTO博客,原文链接:http://blog.51cto.com/jerrysun/560891,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic=&quot;true&quot;`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
650 1
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
485 15
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
356 2
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
329 3
|
JavaScript
JS鼠标框选并删除HTML源码
这是一个js鼠标框选效果,可实现鼠标右击出现框选效果的功能。右击鼠标可拖拽框选元素,向下拖拽可实现删除效果,简单实用,欢迎下载
179 4
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
499 6
|
移动开发 HTML5
html5+three.js公路开车小游戏源码
html5公路开车小游戏是一款html5基于three.js制作的汽车开车小游戏源代码,在公路上开车网页小游戏源代码。
475 0
html5+three.js公路开车小游戏源码
|
安全 网络安全 API
kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie
在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
1054 0
|
JavaScript 前端开发 Android开发
Android开发学习笔记:浅谈WebView
Android开发学习笔记:浅谈WebView
Android开发学习笔记:浅谈WebView