Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将整个javascript函数注入webview并从android调用它_Javascript_Android - Fatal编程技术网

如何将整个javascript函数注入webview并从android调用它

如何将整个javascript函数注入webview并从android调用它,javascript,android,Javascript,Android,我所做的: 我的资产文件夹中有一个js文件和一个html文件,我正在webview中加载该html文件 然后,我手动编辑html文件并将此代码添加到其中 然后再次加载webview,在webview的onPageFinished中,我注入了如下javascript函数调用 webviewMine.loadUrl("javascript:changeColor('" + currentLine + "');"); webviewTTS.loadUrl("javascript:<scrip

我所做的:

我的资产文件夹中有一个js文件和一个html文件,我正在webview中加载该html文件

然后,我手动编辑html文件并将此代码添加到其中

然后再次加载webview,在webview的
onPageFinished
中,我注入了如下javascript函数调用

webviewMine.loadUrl("javascript:changeColor('" + currentLine + "');");
webviewTTS.loadUrl("javascript:<script src=\"file:///android_asset/js/makeBold.js\" type=\"text/javascript\"></script>");
这很好用。然后,我从html页面中删除了script标记,并尝试通过将该代码注入
onPageFinished
中来加载资产中的js,如下所示

webviewMine.loadUrl("javascript:changeColor('" + currentLine + "');");
webviewTTS.loadUrl("javascript:<script src=\"file:///android_asset/js/makeBold.js\" type=\"text/javascript\"></script>");
webviewTTS.loadUrl(“javascript:”);
但是,当从android端执行js调用时,它表示html页面中不存在函数changeColor,这意味着脚本标记的js注入无法工作

有没有像这样注入js函数的标准方法


如果没有,请更正。

使用下面提到的方法从资产文件夹注入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();
    }
}

非常感谢你,我花了这么多时间来做这件事。非常感谢。