我做了什么:
我的资产文件夹中有一个js文件和一个html文件,我正在将该HTML文件加载到webview中。
然后我手动编辑了html文件并将此代码添加到其中
<script src="file:///android_asset/myjs.js" type="text/javascript"></script>
并再次加载Webview,然后在Webview的onPageFinished
中注入了这样的javascript函数调用
webviewMine.loadUrl("javascript:changeColor('" + currentLine + "');");
这很好。然后,我从html页面中删除了脚本标签,并尝试通过将代码插入onPageFinished
中,以这种方式将js加载到资产中
webviewTTS.loadUrl("javascript:<script src=\"file:///android_asset/js/makeBold.js\" type=\"text/javascript\"></script>");
但是当从android端执行js调用时,它说html页面中不存在function changeColor,这意味着我的js脚本标记注入不起作用。
有没有像这样注入js函数的标准方法?
如果没有,请纠正我。
答案 0 :(得分:1)
使用下面提到的方法从资产文件夹中插入js文件
public void injectScriptFile(WebView view, String scriptFile) {
InputStream input;
try {
input = getAssets().open(scriptFile);
byte[] buffer = new byte[input.available()];
input.read(buffer);
input.close();
// String-ify the script byte-array using BASE64 encoding !!!
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
view.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var script = document.createElement('script');" +
"script.type = 'text/javascript';" +
// Tell the browser to BASE64-decode the string into your script !!!
"script.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(script)" +
"})()");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}