Pertanyaan Mengklik URL membuka browser default


Saya telah memuat URL eksternal di saya WebView. Sekarang yang saya butuhkan adalah ketika pengguna mengklik tautan pada halaman yang dimuat, itu harus berfungsi seperti browser normal dan membuka tautan di tempat yang sama. WebView. Tapi itu membuka browser default dan memuat halaman di sana?

Saya telah mengaktifkan JavaScript. Tapi tetap saja itu tidak berhasil. Apakah saya lupa sesuatu?


197
2018-03-04 11:22


asal


Jawaban:


Jika Anda menggunakan WebView Anda harus mencegat klik sendiri jika Anda tidak ingin perilaku Android default.

Anda dapat memantau acara dalam WebView menggunakan sebuah WebViewClient. Metode yang Anda inginkan adalah shouldOverrideUrlLoading(). Ini memungkinkan Anda untuk melakukan tindakan Anda sendiri ketika URL tertentu dipilih.

Anda mengatur WebViewClient Anda WebView menggunakan setWebViewClient() metode.

Jika Anda melihat WebView contoh di SDK ada contoh yang hanya melakukan apa yang Anda inginkan. Ini sesederhana:

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

341
2018-03-04 12:03



dalam beberapa kasus Anda mungkin perlu mengganti onLoadResource jika Anda mendapatkan redirect yang tidak memicu metode pemuatan url. dalam hal ini saya mencoba yang berikut:

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

53
2018-04-22 14:53



Resmi dokumentasi mengatakan, klik pada tautan di WebView akan meluncurkan aplikasi yang menangani URL. Anda perlu mengesampingkan perilaku default ini

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

atau jika tidak ada logika kondisional dalam metode, cukup lakukan ini

myWebView.setWebViewClient(new WebViewClient());

24
2017-09-20 16:51



Tambahkan 2 baris ini di kode Anda -

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

12
2017-10-03 09:39



Jawaban Arulx Z adalah apa yang saya cari.

Saya sedang menulis aplikasi dengan Navigation Drawer dengan recyclerview dan tampilan web, untuk menjaga penjelajahan web di dalam aplikasi terlepas dari hyperlink yang diklik (sehingga tidak meluncurkan browser web eksternal). Untuk itu cukup 2 baris kode berikut:

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

persis di bawah pernyataan WebView Anda.

Berikut ini contoh kode WebView saya yang diterapkan:

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");
}}

dengan cara ini, setiap tautan yang diklik di situs web akan dimuat di dalam WebView Anda. (Menggunakan Android Studio 1.2.2 dengan semua pembaruan SDK)


6
2018-06-15 10:45



Metode boolean shouldOverrideUrlLoading(WebView view, String url) sudah ditinggalkan dalam API 24. Jika Anda mendukung perangkat baru yang harus Anda gunakan boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

Anda dapat menggunakan keduanya dengan melakukan sesuatu seperti ini:

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;
        }
    });
}

5
2018-06-22 19:07