2 votes

Injecter une fonction javascript dans le WebView au chargement de la page

J'essaie d'injecter une fonction JavaScript globale dans une vue Web avant le chargement de la page. J'ai une fonction appelée testJS que je suis en train d'injecter. Dans mon WebViewClient, je fais ce qui suit

private String getJS() {
    return "javascript:function testJS() { return { test: 'Hello World' };}";
}

 @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    view.loadUrl(getJS());
}

Quand j'inspecte la page, window.testJS est indéfinie.

Si je fais ce qui suit, window.testJS a la bonne fonction dans le webview mais il n'est pas chargé assez tôt et ne fonctionne donc pas correctement.

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl(getJS());
}

Dans iOS, je pourrais faire l'équivalent en injectant un script. atDocumentStart et ça fonctionne comme je l'attends.

let userScript = WKUserScript(
        source: scriptContent!,
        injectionTime: WKUserScriptInjectionTime.atDocumentStart,
        forMainFrameOnly: false)
contentController.addUserScript(userScript) 

Existe-t-il un autre moyen de réaliser cela dans une WebView Android ? Cela fonctionne surPageFinished mais pas surPageStarted.

-1voto

Essayez d'abord d'autoriser le javascript en tant que paramètre :

WebSettings webSettings = yourWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

Ensuite :

yourWebView.addJavascriptInterface(new Object(){
       @JavascriptInterface
       public void test(){
           Log.d("JS", "test");
            }
   },"Android");
yourWebview.loadUrl("javascript:functionName(\"" + argument + "\")");

Référez-vous à ces questions :

Android Appel de fonctions JavaScript dans WebView

Appeler une fonction javascript dans un WebView Android

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X