Android中JavaScript与Java交互
16lz
2021-01-23
在4.2以前,JavaScript与Java交互如下:
webview.getSetting().setJavaScriptEnable(true);webview.addJavascriptInterface(new Object(){ public void clickOnAndroid(){ handler.post(new Runnable() { @Override public void run() { System.err.println("javascript 调用 java"); } }); } }, "javascript对象");
在4.2以后,为了使JavaScript能够调用Java的方法,需要为向JavaScript暴露的Java方法添加@JavascriptInteface 注解。否则在targetSdkVersion 17以上的版本,将会报错:
E/Web Console:Uncaught Type Error:Object [object Object] has no method ‘clickOnAndroid’
webview.addJavascriptInterface(new Object(){ @JavascriptInterface public void clickOnAndroid(){ handler.post(new Runnable() { @Override public void run() { System.err.println("javascript 调用 java"); } }); } }, "javascript对象");
简单案例:
package com.example.webviewdemo;@SuppressLint("SetJavaScriptEnabled")public class MainActivity extends Activity { private WebView webview; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { webview = (WebView) findViewById(R.id.webview); WebSettings settings = webview.getSettings(); settings.setJavaScriptEnabled(true); handler = new Handler(); webview.addJavascriptInterface(new Object(){ @JavascriptInterface public void clickOnAndroid(){ handler.post(new Runnable() { @Override public void run() { webview.loadUrl("javascript:testJS()"); } }); } }, "demo"); webview.loadUrl("file:///android_asset/demo.html"); }}
js代码(放在assets目录下):
<html><script language="javascript"> function testJS() { document.getElementById("myPic").src="test.png"; } </script><body> <a onClick="window.demo.clickOnAndroid()"> <img id="myPic" src="ic_launcher.png" mce_src="ic_launcher.png"/><br>切换</a></body></html>
更多相关文章
- Android中的onCreateOptionsMenu()方法和onOptionsItemSelected()方
- 关于androidSDK更新缓慢的解决方法(以W7为例)
- 执行Android JUnit测试出现java.net.SocketException: Permissio
- [android]notifyDataSetChanged方法
- Android后台发送短信方法
- Android 检查应用是否安装、唤起的方法
- Could not find com.android.tools.build:aapt2:3.3.2-5309881.
- Android实现计时与倒计时的几种方法
- Android studio移动项目到另外一个文件夹,结果不能安装的解决方法