Domanda

Ho caricato un URL esterno nel mio WebView. Ora quello che mi serve è che quando l'utente fa clic sul link sulla pagina caricata, si deve lavorare come un normale browser e aprire il link nella stessa WebView. Ma è l'apertura del browser predefinito e il caricamento della pagina c'è?

Ho abilitato JavaScript. Ma ancora non funziona. Ho dimenticato qualcosa?

È stato utile?

Soluzione

Se stai usando un WebView dovrete intercettare gli scatti da soli se non si desidera che il comportamento di default di Android.

È possibile monitorare gli eventi in un WebView utilizzando un WebViewClient . Il metodo che si desidera è shouldOverrideUrlLoading() . Questo consente di eseguire la propria azione quando viene selezionato un particolare URL.

È impostare il WebViewClient del vostro WebView utilizzando il metodo setWebViewClient() .

Se si guarda alla WebView campione nel SDK c'è un esempio che fa proprio quello che vuoi. E 'semplice come:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

Altri suggerimenti

In alcuni casi potrebbe essere necessario un override di onLoadResource se si ottiene un reindirizzamento che non innesca il metodo URL di caricamento. in questo caso ho provato il seguente:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

documentazione dice, cliccare su un link in una WebView sarà applicazione di lancio che gestisce gli URL. È necessario ignorare questo comportamento predefinito

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

o se non v'è alcuna logica condizionale nel metodo semplicemente fare questo

myWebView.setWebViewClient(new WebViewClient());

Aggiungi questo 2 righe nel codice -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

Il metodo boolean shouldOverrideUrlLoading(WebView view, String url) è sconsigliata a API 24. Se si supportano nuovi dispositivi si dovrebbe usare boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

È possibile utilizzare sia facendo qualcosa di simile a questo:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

La risposta di Arulx Z era esattamente quello che stavo cercando.

Sto scrivendo un app con navigazione Cassetto con recyclerview e visualizzazioni, per mantenere la navigazione web all'interno della app, indipendentemente di collegamenti ipertestuali cliccato (quindi non il lancio del browser web esterno). Per questo è sufficiente inserire i seguenti 2 righe di codice:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

esattamente sotto la sua dichiarazione WebView.

Ecco un esempio del mio codice WebView implementato:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

in questo modo, ogni link cliccato sul sito verrà caricato all'interno del vostro WebView. (Utilizzo di Android 1.2.2 Studio con tutto lo SDK aggiornato)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top