Android webview, carregando o arquivo javascript na pasta de ativos
Eu já vi essa pergunta várias vezes, mas ainda não consigo fazer meu código funcionar.
Eu quero o meu webview para carregar um URL (por exemplo, www.google.com) e, em seguida, aplique algum javascript armazenado emassets/jstest.js
, que contém o seguinte:
function test(){
document.bgColor="#00FF00"; //turns to green the background color
}
E aqui é onde eu tento carregar o 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); "
+ "})()");
}
Eu sei que o javascript aqui funciona porque a cor do plano de fundo fica realmente vermelha, mas por algum motivo não será carregadajstest.js
. Acho que o problema pode estar no caminho do arquivo (tenho certeza de que todas as outras linhas do código javascript estão corretas), mas parece correto para mim. E o arquivo está na pasta correta.
O que estou perdendo
EDITA:
Desde aWebResourceResponse
classe @ está disponível apenas no nível 11 da API. Aqui está o que eu descobri no fina
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 + ")()");
}
com ojstest.js
simplesmente contendo:
function() {
document.bgColor="#00FF00";
}