Надеюсь, это поможет!
ел, что этот вопрос задавался много раз, но все еще не может заставить мой код работать.
Я хочу моеWebView загрузить некоторый 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";
}