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

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

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

Но это создает проблему с JavaScript. URL, который я загружаю, имеет некоторый JavaScript, который изменяет некоторые элементы HTML стили CSS (показывающий или скрывающийся элемент) или перенаправляет к другому местоположению onclick - или возможно даже want's для показа окна предупреждений. Но при помощи 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 решает проблему, но затем я не могу поймать события, когда ошибки страницы или закончены, загрузившись.

62
задан 23 February 2011 в 13:23

4 ответа

Попробуйте это для включения javascript

WebView myWebView = (WebView) findViewById(R.id.webView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl(url);
6
ответ дан 31 October 2019 в 13:36

Надлежащий способ включить JavaScript, добавляют ниже двух строк:

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

, Даже если после добавления не работа затем пытается добавить ниже строки.

mWebView.getSettings().setDomStorageEnabled(true);

Теперь Это должно работать. :)

5
ответ дан 31 October 2019 в 13:36

Что произошло в моем случае: Я служил локальным файлам HTML и при применении

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

, но затем мои URL прекратили работать. Решение сделать и JS и локальную работу href состояло в том, чтобы добавить

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

где

    web = (WebView) findViewById(R.id.embedded_web);
1
ответ дан 31 October 2019 в 13:36

Подобный ответу @mdelolmo, но в Kotlin:

    webview.setWebChromeClient(WebChromeClient())
    webview.setWebViewClient(WebViewClient())
    webview.clearCache(true)
    webview.clearHistory()
    webview.getSettings().setJavaScriptEnabled(true)
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true)
-1
ответ дан 31 October 2019 в 13:36

Другие вопросы по тегам:

Похожие вопросы: