從網(wǎng)上巴拉了很多都是有一絲絲問題不夠完美 主要問題就是Android調(diào)用js不通憔四。
問題場景js調(diào)用了Android后立馬回調(diào)js方法出現(xiàn)調(diào)用無效。但是從點擊時間調(diào)用js是沒有問題的般眉。
解決方案以及完整代碼如下:
//開啟JavaScript支持
mWebview.getSettings().setJavaScriptEnabled(true);
// 注冊js調(diào)用Android對象 這李的Android參數(shù)與html方法要保持一致
mWebview.addJavascriptInterface(new Info(), "android");
mWebview.loadUrl("file:///android_asset/alert.html");
JS調(diào)用Android的方法類
/**
* js調(diào)用Android方法
*/
@SuppressLint("JavascriptInterface")
public class Info {
@JavascriptInterface
public void getInfo(String data) {
// js調(diào)用Android有參方法
ToastUtil.showShortToast(data);
toJs();
}
@JavascriptInterface
public void getInfo() {
// js調(diào)用Android 無參方法
ToastUtil.showShortToast("js調(diào)用無參");
toJs();
}
}
Android調(diào)用JS的方法
/**android調(diào)用js
* 必須要切換到UI線程A苏浴!5樵摺J裂础!2憾浴B缍稀2锰妗!C脖俊H跖小!T瓿瘛TQ!>还巍0啤!Q透浮V暧ぁ!J钊稀@Ы椤!U杭省Wā!A竿8睢!5挤亍S炝肌!1怪堋3揪濉!5莸荨喷橙!
*
* */
@JavascriptInterface
public void toJs() {
ThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
//注意test的''單引號
mWebview.loadUrl("javascript:javacalljswith(" + "'test'" + ")");
}
});
}
下面是html代碼,這段代碼可以放服務(wù)器遠(yuǎn)程訪問效果是一樣的漾狼,重慢。
<html>
<head>
<meta http-equiv="Content-Type" charset="UTF-8"/>
<script type="text/javascript">
function javacalljs(){
document.getElementById("showmsg").innerHTML = "JAVA調(diào)用了JS的無參函數(shù)";
}
function javacalljswith(arg){
document.getElementById("showmsg").innerHTML = (arg);
}
</script>
</head>
<body>
<h3>Web模塊</h3>
<h3 id="showmsg">調(diào)用js顯示結(jié)果</h3>
<!--調(diào)用無參 window.android.getInfo() 注意這個android要和webview注冊js時的第二個參數(shù)一樣 -->
<!--// 注冊js調(diào)用Android對象
mWebview.addJavascriptInterface(new Info(), "android");-->
<input type="button" value="Js調(diào)用Java代碼" onclick="window.android.getInfo()"/>
<!--調(diào)用有參-->
<input type="button" value="Js調(diào)用Java代碼并傳參數(shù)" onclick="window.android.getInfo('Js傳過來的參數(shù)')"/>
</body>
</html>
ThreadUtil工具類參考這三行代碼
Looper mainlooper = Looper.getMainLooper();
Handler handler = new Handler(mainlooper);
handler.post(runnable);