Domanda

Ho un WebView molto di base che funziona fino a quando cerco di aggiungere un webViewClient personalizzato dove si ferma l'elaborazione di JavaScript. Sto facendo qualcosa di sbagliato? C'è un altro modo per sbarazzarsi della barra degli indirizzi e opzioni di menu in 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");
    }
È stato utile?

Soluzione 2

Per qualche motivo il webkit corre JS in modo diverso rispetto al browser - ho finito per andare in giro per il problema costringendo alcuni JS per eseguire con la seguente riga dopo la pagina aveva caricato:

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

Altri suggerimenti

Nella mia app Io uso il seguente e non c'è barra degli indirizzi, e JavaScript opere (modificato in base ai nomi):

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

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

Non faccio nulla con setWebViewClient o setWebChromeClient e funziona come descritto.

Credo che il problema con il vostro codice è che JavaScript sia abilitato sul default (interno) WebViewClient e / o WebChromeClient allora si sostituisce quelli con quelli nuovi che ora hanno nuove proprietà.

Se si sposta la chiamata setJavaScriptEnabled(true) venire dietro a questi nuovi incarichi (e prima della loadUrl credo che il codice avrebbe funzionato.

I è stato aiutato da una decisione del genere. Avvolgere il calcolo in una funzione anonima.

"javascript:" + "(function(){ <YOUR CODE> })();"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top