我想在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");
答案 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 + "';"