Я видел, что этот вопрос задавался много раз, но до сих пор не удается заставить мой код работать.
Я хочу, чтобы мой веб-просмотр загружал некоторый URL (например, www.google.com), а затем применил некоторый javascript, хранящийся в assets/jstest.js
, который содержит следующее:
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";
}