Android注入webview外部js,执行函数并发出警报

时间:2011-01-21 17:13:50

标签: javascript android webview alert

我想在webview中注入一个外部javascript并执行其中一个函数execute()。完成后,将引发警报并且字符串返回到活动
这就是我这样做但它似乎不起作用(js已经过测试)

view.loadUrl("javascript:(function() { var script=document.createElement('script');script.type='text/javascript';script.src=" + jsFileURL + ";" + "document.getElementsByTagName('head').item(0).appendChild(script);window.HTMLOUT.showHTML(execute());})()");

这是我实施HTMLOUT的方式,而在ChromeClient中覆盖警报

browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); browser.setWebViewClient(new mWebViewClient()); browser.setWebChromeClient(new mChromeClient()); browser.loadUrl("file:///android_asset/Travian comx2b.htm");

3 个答案:

答案 0 :(得分:3)

好多次尝试后我找到了解决方法,但遗憾的是不是“解决方案”。我使用此加载view.loadUrl("javascript:" + src + " execute(); " + "");,而源src来自文本文件script.js,其中包含我的javascript(包括函数和普通命令)

//get script
InputStream is;
        String src= "";
        try {
            is = getAssets().open("travianbot.js");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            // Convert the buffer into a string.
            src = new String(buffer);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

script.js的一个示例(小心在行尾“;”)

function addItem(v, link, x, y, result) {
    //function commands  
}
function popup() {
    alert(execute().split("@"));
}     
function execute(){  
    //function commands
    additem(...);
}
// plain commands
.......

远程脚本的一个解决方案,我还没有测试过它,是解析远程脚本(例如输入流),然后将其作为纯文本包含。

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为你必须将jsFileUrl用单引号括起来。

script.src='" + jsFileURL + "';"