java數組js
Ⅰ 如何在WebView中通過java傳遞給JS數組
1.整體思路:
js調用java
首先將js代碼注入到webview的頁面中,然後通過修改window.location.href來向java傳遞參數,java端通過監聽頁面url的改變來識別js端傳遞的參數.然後再經解析數據實現java方法的調用.
java調用js
java通過webView.loadUrl("JavaScript:"+jsCode);來實現js代碼的調用
2. java調用js的實現
java調用js的方法,相當簡單:
String jsCode = "(function(){ /*js code here*/ })()";
webview.loadUrl("javascript:" + jsCode);
注意:要把js代碼用自執行函數包裹起來
利用這種方法可以把任意代碼注入到頁面中
注意: 當頁面剛載入時就需要把 2.1中的js代碼注入到頁面中,但是有時會出現頁面載入完成,但是注入的代碼沒有執行的現象,應該是因為js沒有及時載入而頁面先載入完成。要解決這個問題就需要在頁面載入完成時觸發一個事件比如jsBridgeReady,js端通過監聽jsBridgeReady事件來調用java方法。那麼總體流程如下:
載入頁面->注入js代碼->頁面載入完成->觸發js注入完成事件
代碼:
在BridgeWebClient中添加邏輯: 1,載入頁面時注入js代碼: 2,載入完成後觸發載入完成事件
@Override
public void onLoadResource(WebView view, String url) {
// 注入橋接代碼
// 這里通過讀取js文件獲得js代碼
if (mFileName != null) {
view.loadUrl(mBridge.createBaseJs(mContext, mFileName));
}
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 觸發注入完成事件,用於解決 注入的代碼沒有及時載入成功導致無法調用的問題
view.loadUrl("(function(){if(window.UAPPJSBridgeReady){window.UAPPJSBridgeReady();}})()");
}
如果你也想從文件讀取js代碼,記得把讀取的代碼壓縮一下,把注釋和換行刪除,不然很可能會報錯
js端調用java注入的代碼:
//判斷代碼是否注入完成
if(window.UAPPJSBridge){
//調用注入的方法
window.UAPPJSBridge.wxshare(message,success,error);
}else{
//監聽注入完成的事件
window.onBridgeLoaded=function(){
if(window.UAPPJSBridge){
window.UAPPJSBridge.wxshare(message,success,error);
}
}
}