我看到这个问题已经被问了很多次,但仍然无法让我的代码正常工作。
我想让我的webview加载一些URL(比如www.google.com),然后应用存储在assets/jstest.js
中的一些javascript代码,其中包含以下内容:
function test(){
document.bgColor="#00FF00"; //turns to green the background color
}
这里是我尝试加载JS的地方:
@Override
public void onPageFinished(WebView view, String url){
view.loadUrl("javascript:(function() { "
+ " document.bgColor='#FF0000';" //turns to red the background color
+ " var script=document.createElement('script'); "
+ " script.setAttribute('type','text/javascript'); "
+ " script.setAttribute('src', 'file:///android_asset/jstest.js'); "
+ " script.onload = function(){ "
+ " test(); "
+ " }; "
+ " document.getElementsByTagName('head')[0].appendChild(script); "
+ "})()");
}
我知道这里的JavaScript代码可行,因为背景颜色实际上会变成红色,但是由于某种原因它无法加载jstest.js
文件。我认为问题可能在于文件路径(我确定JavaScript代码的每一行都是正确的),但是对我来说看起来是正确的,并且文件在正确的文件夹中。我错过了什么?
编辑:
由于
WebResourceResponse
类仅适用于API级别11,因此最终我弄清楚了以下内容。public void onPageFinished(WebView view, String url){
String jscontent = "";
try{
InputStream is = am.open("jstest.js"); //am = Activity.getAssets()
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while (( line = br.readLine()) != null) {
jscontent += line;
}
is.close();
}
catch(Exception e){}
view.loadUrl("javascript:(" + jscontent + ")()");
}
只需在jstest.js
中简单地包含:
function() {
document.bgColor="#00FF00";
}