Android – chargez et exécutez javascript sur un site Web externe

Supposons que je souhaite ajouter un <div>hello</div> au bas de la page http://www.google.com que j'ai chargé dans un WebView. C'est possible?

Je peux le faire pour une page Web interne (une page située sur la mémoire interne de l'appareil).

Voici le code de mon Activité:

 import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class Main extends Activity { private WebView mWebview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWebview = new WebView(this); mWebview.getSettings().setJavaScriptEnabled(true); final Activity activity = this; mWebview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); } private final String jsFileURL = "file:///android_asset/script.js"; @Override public void onPageFinished(WebView view, String url){ final WebView v = view; view.loadUrl("javascript:{" + "var script = document.createElement('script');" + "script.type = 'text/javascript';" + "script.src = '" + jsFileURL + "';" + "document.getElementsByTagName('head').item(0).appendChild(script); };"); new Handler().postDelayed(new Runnable() { @Override public void run() { v.loadUrl("javascript:job();"); } }, 100); } }); mWebview.loadUrl("file:///android_asset/page.html"); //mWebview.loadUrl("http://www.google.com"); setContentView(mWebview ); } } 

Le contenu de script.js situé dans le dossier " / assets ":

 function job() { var div = document.createElement('div'); div.innerHTML = 'hello'; document.getElementsByTagName('body').item(0).appendChild(div); } 

Et le contenu de page.html situé dans le dossier " / assets " aussi:

 <html> <head></head> <body> <div>content of my page</div> </body> </html> 

MAIS

Si je change

 mWebview.loadUrl("file:///android_asset/page.html"); //mWebview.loadUrl("http://www.google.com"); 

par

 //mWebview.loadUrl("file:///android_asset/page.html"); mWebview.loadUrl("http://www.google.com"); 

L'astuce ne fonctionne plus … Existe-t-il une raison de sécurité?

Créez un dossier "raw" dans res: res / raw. Puis hébergez votre fichier.html dans le dossier brut. Puis avec votre code:

String link = this.getApplicationContext (). GetFilesDir () + "raw / yourFile.html";

MWebview.loadUrl (lien);