103 votes

JavaScript ne fonctionne pas dans Android Webview ?

Je suis en train de faire une version Android d'une application iOS relativement simple qui utilise un webview, quelques boutons et qui repose ensuite sur des appels JavaScript à un CMS.

Mais je suis bloqué à un stade très précoce du développement : Le webview ne fonctionne pas avec JavaScript. J'ai lu de nombreux articles sur la façon d'activer JS dans un webview Android, mais jusqu'à présent, sans succès.

Voici une partie de mon code :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.setWebViewClient(new HelloWebViewClient()
    {
        @Override  
        public void onPageFinished(WebView view, String url)  
        {  
            //Appel d'une méthode init qui indique au site web que nous sommes prêts
            mWebView.loadUrl("javascript:m2Init()");
            page1(mWebView);
        }  
    });
  mWebView.loadUrl("http://my_url/mobile/iphone//app.php");  
}

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public void page11(View view)
{
    mWebView.loadUrl("javascript:m2LoadPage(1)");
}

Qu'est-ce que je fais de mal ici ? L'URL fonctionne parfaitement dans mon application iOS et dans un navigateur. Mais pas dans mon application !

S'il vous plaît, dites-moi que c'est quelque chose d'évident...

6voto

Stephan Branczyk Points 5322

Avez-vous activé les bonnes permissions Internet dans le manifeste? Tout semble bien sinon. Par hasard, avez-vous également testé ce code sur un téléphone Android réel? Et pas seulement sur l'émulateur?

Voici un bon tutoriel sur une approche légèrement différente. Vous voudrez peut-être essayer celui-ci pour voir s'il fonctionne pour vous.

3voto

user574199 Points 43

Cette vidéo (http://youtu.be/uVqp1zcMfbE) m'a donné l'astuce pour le faire fonctionner. La clé est de sauvegarder vos fichiers html et js dans le dossier Android assets/. Ensuite, vous pouvez y accéder facilement via:

webView.loadUrl("file:///android_asset/your_page.html");

2voto

user2851687 Points 118

Si vous êtes en Kotlin, vous pouvez utiliser la méthode suivante pour faire fonctionner le JavaScript :

webView.apply {
     loadUrl(
         "file:///android_asset/frm/my_html_landing_page_here.html"
     )

     settings.javaScriptEnabled = true
     settings.domStorageEnabled = true
 }

Assurez-vous également que l'ensemble de votre dossier se trouve à l'intérieur du dossier Assets (cela inclut les fichiers HTML, JavaScript et autres fichiers nécessaires)

2voto

DatVM Points 2160

Xamarin Android a également le même problème que WebView ne exécute aucun Javascript. Suivez la réponse de @computingfreak:

        this.SetContentView(Resource.Layout.activity_main);

        var webView = this.FindViewById(Resource.Id.webView);

        var webSettings = webView.Settings;
        webSettings.JavaScriptEnabled = true;
        webSettings.DomStorageEnabled = true;
        webSettings.LoadWithOverviewMode = true;
        webSettings.UseWideViewPort = true;
        webSettings.BuiltInZoomControls = true;
        webSettings.DisplayZoomControls = false;
        webSettings.SetSupportZoom(true);
        webSettings.DefaultTextEncodingName = "utf-8";

Étrangement, ils ont changé toutes les méthodes setter en propriétés sauf SetSupportZoom et SupportZoom reste en tant que getter :/

1voto

PYK Points 1225

Il suffit de permettre à votre WebView d'exécuter du JS, aussi simple que cela :

WebView web=(WebView)findViewById(R.id.web);
web.getSettings().setJavaScriptEnabled(true);

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