Activation du JavaScript général dans WebViewClient

En cherchant une réponse dans Google, il semble que je ne suis pas le seul à avoir un problème qui semble impossible à résoudre.

J’ai réussi à créer un WebView avec un WebViewClient personnalisé – cela me permet d’avoir un journal de processus et d’afficher un message d’erreur si une URL ne peut pas être chargée.

Mais cela crée un problème avec JavaScript. L’URL que je charge contient du code JavaScript qui modifie certains styles CSS d’éléments HTML (affichage ou masquage d’éléments) ou redirige vers un autre emplacement sur onclick – ou peut-être même affiche un message d’alerte. Mais en utilisant WebViewClient, aucun ne fonctionne.

Voici comment je charge une page:

public void loadUrl(Ssortingng url) { final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getSsortingng(R.ssortingng.loading), true); final WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setVerticalScrollBarEnabled(false); myWebView.setHorizontalScrollBarEnabled(false); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes if (url.endsWith(".mp4")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "video/mp4"); view.getContext().startActivity(intent); } else { view.loadUrl(url); } return true; } public void onPageFinished(WebView view, Ssortingng url) { //Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } public void onReceivedError(WebView view, int errorCode, Ssortingng description, Ssortingng failingUrl) { Toast.makeText(myActivity.this, description, Toast.LENGTH_SHORT).show(); Ssortingng summary = "" + getSsortingng(R.ssortingng.lost_connection) + ""; myWebView.loadData(summary, "text/html", "utf-8"); } }); //End WebViewClient myWebView.loadUrl(url); } 

Cela pourrait probablement être fait de manière plus intelligente, mais je suis nouveau en développement Java et Android …

Est-il possible pour moi d’activer le JavaScript pour WebViewClient du tout? La suppression de WebViewClient résout le problème, mais je ne peux alors pas intercepter les événements lorsque la page contient des erreurs ou que le chargement est terminé.

Je ne sais pas quel est votre problème exact, mais je peux activer le JavaScript et un WebViewclient personnalisé sans aucun problème:

 WebView vistaWeb = (WebView) findViewById(R.id.webview); vistaWeb.setWebChromeClient(new MyCustomChromeClient(this)); vistaWeb.setWebViewClient(new MyCustomWebViewClient(this)); vistaWeb.clearCache(true); vistaWeb.clearHistory(); vistaWeb.getSettings().setJavaScriptEnabled(true); vistaWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

Essayez ceci pour activer javascript

 WebView myWebView = (WebView) findViewById(R.id.webView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient()); myWebView.loadUrl(url); 

Les “URL-Javascript” sont-elles acheminées via shouldOverrideUrlLoading ? Essayez de vérifier cela et si c’est le cas, renvoyez la valeur false pour les liens de ce type (afin que la vue Web gère le lien, pas votre WebViewClient)

Qu’est-il arrivé dans mon cas: je servais des fichiers HTML locaux et lors de l’application

  web.getSettings().setJavaScriptEnabled(true); web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

mais alors mes urls ont cessé de fonctionner. La solution pour réaliser à la fois le travail JS et le travail local href consistait à append

  web.getSettings().setAllowFileAccess(true); web.getSettings().setAllowFileAccessFromFileURLs(true); 

  web = (WebView) findViewById(R.id.embedded_web); 

La méthode appropriée pour activer JavaScript consiste à append les deux lignes suivantes:

 mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

Même si après l’ajout de son ne fonctionne pas alors essayez d’append la ligne ci-dessous.

 mWebView.getSettings().setDomStorageEnabled(true); 

Maintenant ça devrait marcher. 🙂