Android: веб-просмотр не загружает JavaScript с пользовательским WebViewClient - PullRequest
2 голосов
/ 06 августа 2010

У меня есть очень простой WebView, который работает, пока я не попытаюсь добавить пользовательский webViewClient, где он останавливает обработку JavaScript. Я делаю что-то неправильно? Есть ли другой способ избавиться от адресной строки и пунктов меню в WebView?

    browser = (WebView) findViewById(R.id.webkit);

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

    // uncommenting this line will remove address bar, but also stop JavaScript from loading
    //browser.setWebViewClient(new InternalWebViewClient());

    // even uncommenting this line will stop JavaScript from loading
    //browser.setWebViewClient(new WebViewClient());

    browser.setWebChromeClient(new InternalWebChromeClient());
    if (savedInstanceState != null) {
        browser.restoreState(savedInstanceState);
    } else {
        browser.loadUrl("http://site.with.javascript");
    }

Ответы [ 3 ]

4 голосов
/ 06 августа 2010

В моем приложении я использую следующее, и нет адресной строки, а JavaScript работает (изменен в соответствии с вашими именами):

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

browser.loadUrl("http://site.with.javascript");

Я ничего не делаю с setWebViewClient или setWebChromeClient, и все работает как описано.

Я думаю, что проблема с вашим кодом заключается в том, что вы включаете JavaScript для стандартного (внутреннего) WebViewClient и / или WebChromeClient, затем заменяете их новыми, которые теперь имеют новые свойства.

Если вы переместите вызов setJavaScriptEnabled(true), чтобы прийти после этих новых назначений (и до loadUrl, я думаю, ваш код будет работать.

3 голосов
/ 09 августа 2010

По какой-то причине WebKit запускает JS не так, как браузер - я решил проблему, заставив некоторые JS запустить следующую строку после загрузки страницы:

browser.loadUrl("javascript:document.getElementById('something').do.something()");
0 голосов
/ 27 апреля 2017

Мне помогло такое решение.Обернуть вычисления в анонимной функции.

"javascript:" + "(function(){ <YOUR CODE> })();"
...