js調試效果:
下面主要是拼裝js代碼?:
/** * @Description 獲取webView選中文字內容 * @param webView* @param callBack*/public static void webViewGetSelectedData(WebView webView,webViewGetSelectedDataCallBack callBack) {String js ="function selectEnable(document) {"+ " document.oncontextmenu = new Function(\"if(event){event.returnValue=true;}\");"+ " document.onselectstart = new Function(\"if(event){event.returnValue=true;}\");"+ " let frames = document.getElementsByTagName(\"iframe\");"+ " if (frames.length > 0) {"+ " for (var i = 0; i < frames.length; i++) {"+ " document = frames[i].contentDocument;"+ " selectEnable(document);"+ " }"+ " }"+ "}"+ "function selectTxt(document) {"+ " let rtnTxt = \"\";"+ " rtnTxt = document.getSelection ? document.getSelection().toString() : document.selection.createRange().text;"+ " let frames = document.getElementsByTagName(\"iframe\");"+ " if (frames.length > 0) {"+ " for (var i = 0; i < frames.length; i++) {"+ " document = frames[i].contentDocument;"+ " let sltTxt = selectTxt(document);"+ " if (sltTxt != \"\") {"+ " rtnTxt = sltTxt;"+ " }"+ " }"+ " }"+ " return rtnTxt;"+ "}"+ "(function(){"+ " selectEnable(document);"+ " return selectTxt(document);"+ "})()";/* android系統4.4以上的時候調用 4.4以下忽略*/webView.evaluateJavascript("javascript:" + js, txt -> {//todo 這里可以對返回文本進行處理,比如轉為中文字符,過濾非法字符callBack.onFinished(txt);}); }public interface webViewGetSelectedDataCallBack{/**@param value*/void onFinished(String value);}
至于如何調用,可以通過?
@Override
public void onActionModeStarted(ActionMode mode) {……webViewGetSelectedData(webView, value -> { Log.i("getSelection", "getSelectedData: "+value);});……super.onActionModeStarted(mode);
}
?