安卓可以调js的方法,可js调不了安卓的方法
直接上代码了:
public class MainActivity extends AppCompatActivity {
WebView webView;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
// webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
// webSettings.setLoadWithOverviewMode(true);
// webSettings.setBuiltInZoomControls(true);
// webSettings.setSupportZoom(true);
// webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹窗
webView.setWebChromeClient(new WebChromeClient());
webView.addJavascriptInterface(new JsInterface(), “demo”);
webView.loadUrl(“file:///android_asset/demo.html”);
}
final class JsInterface {
JsInterface(){
}
@JavascriptInterface//安卓4.2之后为提高安全性,使JS只能访问JavascriptInterface注解的函数
public void clickOnAndroid(String msg) {
Log.e("TAG", msg);
mHandler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:wave('这是来自安卓的消息!')");//安卓调js
}
});
}
}
}
这里不再冗述js与webview具体是如何交互的,如果碰到我一样的问题的同学,只要在你想要js执行的方法之前加上@JavascriptInterface这个注解就一切OK了,至于为什么,代码上有注释