android、webview、js交互

不多说,直接上干货!
1.使用webview对象的addJavascriptInterface方法


2.addJavascriptInterface方法有两个参数,第一个参数就是我们一般会实现一个自己的类,类里面提供我们要提供给javascript访问的方法;第二个参数是访问我们在obj中声明的方法时候所用到的js对象,调用模式为window.interfaceName.方法名()或者是javascript: interfaceName.方法名() ;,如DemoWebView.addJavascriptInterface(new JavaScriptinterface(this), "android");


3.编写JavaScriptinterface类,如有一个函数名为showToast()的方法


4.在html中调用时的形式:javascript:android.showToast()。


可以查阅:http://www.cnblogs.com/lee0oo0/archive/2012/08/01/2617953.html 写得很明白。


android加载:


DemoWebView = (WebView) findViewById(R.id.myWebView);
        DemoWebView.getSettings().setJavaScriptEnabled(true);
        DemoWebView.addJavascriptInterface(this,
                "demoAndroidObj");//将当前activity赋值给js中的window对象。
        String htmlText = getFromAssets("test.html");
        //把myWebView加载html
        DemoWebView.loadData(htmlText, "text/html", "utf-8");
        DemoWebView.setWebViewClient(new myWebViewClient());


js调用:
<script type="text/javascript">   
function Redirect(param1,param2,param3) {      window.demoAndroidObj.Redirect(param1,param2,param3);
}
</script></head><body><input type="button" value="Say hello" onClick="Redirect('1','RedirectActivity','demo')" /></body></html>
android回调:
此回调由 demoAndroidObj 所对应的activity实现。
public void Redirect(string type, String activityName, String demoNma) {
		Message message = new Message();
		message.what = redirectType;
		Bundle bundle = new Bundle();
		bundle.putString("type", type);
		bundle.putString("activityName",activityName);
bundle.putString("demoName",demoName);
message.setData(bundle);handler.sendMessage(message);}
final Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
Intent intent = new Intent();
Bundle data = msg.getData();
String type = data.getString("type");
String activityName= data.getString("activityName");
String demoName= data.getString("demoName");
 intent.putExtra("type",type);
intent.putExtra("demoName",demoName);
startActivity(intent, activityName, true);
window.demoAndroidObj.Redirect(param1,param2,param3);
 
 
这方法实际上调用的就是 activity中 public void Redirect(string type, String activityName, String demoNma)
如此即可完成想要的交互效果。






你可能感兴趣的:(js,android,webView)