首先webview.settings.javaScriptEnabled = true
必不可少
1和2参考懒星人老师的博客
- Andriod调用JS方法
// test为js方法
webview.loadUrl("javascript:test()"
// 直接写方法
webview.loadUrl("javascript:(function() { document.getElementsByClassName('your_class_name')[0].style.display='none'; })()");
- JS调用Android方法
太懒了,不写了...
- Android修改JS方法,并调用。
// 定义js
val injectJs = "javascript:function test(){window.alert('注入成功');}"
// 注入js
view?.loadUrl(injectJs)
// 调用js方法
view?.loadUrl("javascript:test();")
注意安卓默认不让弹alert,需要重写下
webview.webChromeClient = object :WebChromeClient(){
override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
return super.onJsAlert(view, url, message, result)
}
}
- Android修改JS方法,并且通过修改的JS方法调用Android方法。
// 不用管,就这么写,foo名字随便起
webview.addJavascriptInterface(this,"foo")
webview.webViewClient =object :WebViewClient(){
// 这个方法可能会调用多次
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val injectJs = "javascript:function test(){foo.androidFun('Hello World!');}"
view?.loadUrl(injectJs)
view?.loadUrl("javascript:test();")
}
}
@JavascriptInterface
fun androidFun(content:String){
toast(content)
}
网友评论