Pergunta

Eu tenho um muito básico WebView que funciona até eu tentar adicionar um costume webViewClient onde para de processar o JavaScript. Estou fazendo algo errado? Existe outra maneira de se livrar da barra de endereços e das opções de menu no 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");
    }
Foi útil?

Solução 2

Por alguma razão, o webkit executa o JS de maneira diferente do que o navegador - acabei contornando o problema, forçando alguns JS a correr com a linha a seguir após o carregamento da página:

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

Outras dicas

No meu aplicativo, uso o seguinte e não há barra de endereço, e JavaScript Works (modificado para combinar com sua nomeação):

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

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

Eu não faço nada com setWebViewClient ou setWebChromeClient e funciona como descrito.

Eu acho que o problema do seu código é que você habilita o JavaScript no WebViewClient padrão (interno) e/ou webchromeclient, então você substitui aqueles por novos que agora possuem novas propriedades.

Se você mover o setJavaScriptEnabled(true) Ligue para vir depois dessas novas tarefas (e antes do loadUrl Eu acho que seu código funcionaria.

Fui ajudado por essa decisão. Enrole a computação em uma função anônima.

"javascript:" + "(function(){ <YOUR CODE> })();"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top