Включение общего JavaScript в WebViewClient

При поиске ответа в google кажется, что я не единственный, у которого есть проблема, которая кажется невозможной для решения.

Мне удалось создать WebView с пользовательским WebViewClient – это позволяет мне иметь processdialog и показывать сообщение об ошибке, если URL-адрес не может быть загружен.

Но это создает проблему с JavaScript. В URL-адресе, который я загружаю, есть JavaScript, который изменяет некоторые стили CSS-стилей HTML (показывающие или скрывающие элемент) или перенаправляет их в другое место onclick – или, возможно, даже хочет показать окно предупреждения. Но с помощью WebViewClient ни один из них не работает.

Вот как я загружаю страницу:

public void loadUrl(String url) { final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getString(R.string.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, String 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, String url) { //Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(myActivity.this, description, Toast.LENGTH_SHORT).show(); String summary = "<html><body><strong>" + getString(R.string.lost_connection) + "</body></html>"; myWebView.loadData(summary, "text/html", "utf-8"); } }); //End WebViewClient myWebView.loadUrl(url); } 

Это, вероятно, можно было бы сделать более разумно, но я новичок в разработке на Java и Android …

Возможно ли вообще включить JavaScript для WebViewClient? Удаление WebViewClient решает проблему, но тогда я не могу поймать события, когда ошибки страницы или закончена загрузка.

Я не знаю, какова ваша точная проблема, но я могу без проблем WebViewclient с JavaScript и настраиваемым WebViewclient :

 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); 

Нужно ли «Javascript-URL-адреса» маршрутизироваться через shouldOverrideUrlLoading ? Попробуйте проверить это, и если да, верните false для таких ссылок (чтобы веб-просмотр обрабатывал ссылку, а не ваш WebViewClient)