Android: WebView не загружает JavaScript с пользовательским WebViewClient

StackOverflow https://stackoverflow.com/questions/3423579

Вопрос

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

    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");
    }
Это было полезно?

Решение 2

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

browser.loadUrl("javascript:document.getElementById('something').do.something()");

Другие советы

В моем приложении я использую следующее, и нет адресной строки, а 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 Я думаю, что ваш код будет работать.

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

"javascript:" + "(function(){ <YOUR CODE> })();"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top