首先要写一个接口来与js链接这个接口重要的就是注释
注意他的别名
function js2java() {
aaa.jsAndAndroid();
}
public class JSInterface {
//写个接口来链接HTML
public interface JstoAndroid{
//接口中所有的属性和方法 默认的访问修饰符都是public
void jsToAndroid();
}
//当前类中创建一个接口对象 设置为null
//当前类中的所有方法 如果没有特殊标注 JS是无法调用的
JstoAndroid jStoAndroid=null;
public void getJstoAndroid(JstoAndroid jStoAndroid){
this.jStoAndroid = jStoAndroid;
}
//如果此方法是提供给JS调用的 需要添加注解
@JavascriptInterface
public void jsAndAndroid(){
if(jStoAndroid!=null){
jStoAndroid.jsToAndroid();
}
}
}
//设置兼容JS 这个属性可以实现Android与JS的单向通信
webSettings.setJavaScriptEnabled(true);
//如果需要实现JS与Android的通信 需要添加通信接口
JSInterface jsInterface = new JSInterface();
webtext.addJavascriptInterface(jsInterface,"aaa");//别名
jsInterface.getJstoAndroid(new JSInterface.JstoAndroid() {
@Override
public void jsToAndroid() {
Toast.makeText(MainActivity.this, "点我调用123123", Toast.LENGTH_SHORT).show();
}
});
调用HTML的方法,直接加载方法
webtext.loadUrl("javascript:java2js(0)");
不过你的HTML也需要有这个方法
function java2js(isHide) {
var x = document.getElementById('div');
if(isHide==0)
x.className = "";
else
x.className = "hide";
}
拦截HTML的窗口
webtext.setWebChromeClient(new WebChromeClient(){设置辅助类
重写onJsAlert来实现
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("转换后的对话框:")
.setMessage(message)
.setPositiveButton("确定",null).show();
return true;
}
还有一个辅助类哦
webtext.setWebViewClient(new WebViewClient(){
//设置在被应用中浏览
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
webtext.loadUrl(request.getUrl().toString());
return true;
}