Android WebView详解之JS调用Java方法
来源:互联网 发布:手机焓湿图计算软件 编辑:程序博客网 时间:2024/06/05 12:25
1、布局文件:只有一个WebView控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>2、Java界面实现
import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.webkit.WebView;import android.webkit.WebViewClient;public class MainActivity extends Activity {private WebView webView;@SuppressLint("SetJavaScriptEnabled")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);webView = (WebView) findViewById(R.id.webView1);webView.getSettings().setJavaScriptEnabled(true);//JS映射webView.addJavascriptInterface(new WebHost(this), "js");webView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }}); //显示本地静态页webView.loadUrl("file:///android_asset/www/login.html");}}3、JS映射类
import android.content.Context;
import android.webkit.JavascriptInterface;import android.widget.Toast;public class WebHost {public Context context;public WebHost(Context context){this.context = context;}@JavascriptInterfacepublic void acllJs(){Toast.makeText(context, "点击了登录按钮!", Toast.LENGTH_SHORT).show();}}
注意:在被调用的方法名上面一定要加@JavascriptInterface。如果JS代码中访问Java中的函数,则您会用到WebView的addJavascriptInterface()函数。因为安全问题,在Android4.2中(如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数。
4、静态页login.html代码:
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>文本输入框、密码输入框</title><script type="text/javascript"> function rec(){ js.acllJs();<!--js与前面映射的参数相同,acllJs()与映射类中的方法相同--> }</script></head><body><form id="login" method="post" action="main.html">账户:<input type="text"id="user" name="zh" value="1" /> <br>密码: <input type="password" id="pas" name="mm" value="2" /><br><input name="button" type="button" onClick="rec()" value="登录" /></form> </body></html>
源码下载
---------------------------------------------------------------------------------------------------------------------------------------------有时会出现混淆打包失效问题,需要在proguard.cfg文件中添加
-keep public class com.cx.httpwebview.WebHost{public <methods>}
表示WebHost类下的所有方法不被混淆,这个方法还没有测试,这里只是做记录。
附录:
WebViewJavascriptBridge是移动UIView和Html交互通信的桥梁,他替代了WebView的自带的Javascriptinterface的接口,使得我们的开发更加灵活和安全。
对于安卓开发有一段时间的人来说,知道安卓4.4以前谷歌的webview存在安全漏洞,网站可以通过js注入就可以随便拿到客户端的重要信息,甚至轻而易举的调用本地代码进行流氓行为,谷歌后来发现有此漏洞后,增加了防御措施,如果要是js调用本地代码,开发者必须在代码申明JavascriptInterface,例如在4.0之前我们要使得webView加载js只需本文中介绍的方法。4.4之后调用需要在调用方法加入加入@JavascriptInterface注解,如果代码无此申明,那么也就无法使得js生效,也就是说这样就可以避免恶意网页利用js对安卓客户端的窃取和攻击。但是即使这样,我们很多时候需要在js记载本地代码的时候,要做一些判断和限制,或者有可能也会做些过滤和对用户友好提示,因此JavascriptInterface也就无法满足我们的需求了,特此有大神就写出了WebViewJavascriptBridge框架。
使用方法:
1.将jsBridge.jar引入到我们的工程,此jar包可以到gitHub上下载。
https://github.com/marcuswestin/WebViewJavascriptBridge
2.WebView包需使用以上包的webView
- Android WebView详解之JS调用Java方法
- Android WebView详解之JS调用Java方法
- android中webview调用js方法,js调用java方法
- java 调用webview js方法, webview js调用java方法
- WebView之js调用Android类的方法传递数据
- android webview java调用js方法没反应
- Android之Webview使用Java代码和JS相互调用
- Android WebView详解和调用JS
- webview通过js调用android方法
- JS 调用IOS Android webview方法
- webview中js调用java方法
- Android WebView java和js互相调用
- Android WebView js与Java调用实例
- Android WebView JAVA 与 JS 相互调用
- WebView/JS/Java调用
- Android Webview中调用本地java方法
- android之通过webview实现与js方法相互调用,数据交互
- 安卓与JS互调之android webview addJavascriptInterface 的方法不能调用
- 母函数 整数拆分 (hdu 1028 , poj 1221)
- 用vs12做个黑框框
- LPCTSTR、LPSTR与LPTSTR
- iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)
- Hibernate-Validation的使用
- Android WebView详解之JS调用Java方法
- Eclipse开发环境搭建
- 网站优化之长尾关键词的弯道超越
- Condor and Pegasus on ubuntu12.04
- C#中使用ACCESS插入语法出错
- Tsar学习笔记----安装篇
- hadoop中使用MapReduce编程实例(转)
- Known Issues: Grid Infrastructure Redundant Interconnect and ora.cluster_interconnect.haip (Doc ID 1
- js 读取excel 文件