webentwicklung-frage-antwort-db.com.de

Durch Klicken auf URLs wird der Standardbrowser geöffnet

Ich habe eine externe URL in mein WebView geladen. Was ich jetzt brauche ist, dass, wenn der Benutzer auf die Links auf der geladenen Seite klickt, es wie ein normaler Browser funktionieren muss und den Link in demselben WebView öffnen muss. Aber es öffnet den Standardbrowser und lädt die Seite dort?

Ich habe JavaScript aktiviert. Aber es funktioniert immer noch nicht. Hab ich was vergessen

204
JaVadid

Wenn Sie ein WebView verwenden, müssen Sie die Klicks selbst abfangen, wenn Sie das Standardverhalten Android) nicht möchten.

Sie können Ereignisse in einem WebView mit einem WebViewClient überwachen. Die gewünschte Methode ist shouldOverrideUrlLoading() . Auf diese Weise können Sie Ihre eigene Aktion ausführen, wenn eine bestimmte URL ausgewählt wird.

Sie setzen das WebViewClient Ihres WebView mit der setWebViewClient() Methode .

Wenn Sie sich das Beispiel WebView im SDK ansehen gibt es ein Beispiel, das genau das macht, was Sie wollen. Es ist so einfach wie:

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

in einigen Fällen benötigen Sie möglicherweise eine Überschreibung von onLoadResource, wenn Sie eine Umleitung erhalten, die die URL-Lademethode nicht auslöst. In diesem Fall habe ich Folgendes versucht:

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

Offiziell Dokumentation Wenn Sie in einer WebView-Anwendung auf einen Link klicken, wird eine Anwendung gestartet, die URLs verarbeitet. Sie müssen dieses Standardverhalten überschreiben

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

oder wenn es keine bedingte Logik in der Methode gibt, tun Sie dies einfach

myWebView.setWebViewClient(new WebViewClient());
25
abbas

Fügen Sie diese 2 Zeilen in Ihren Code ein -

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

Die Methode boolean shouldOverrideUrlLoading(WebView view, String url) wurde in API 24 verworfen. Wenn Sie neue Geräte unterstützen, sollten Sie boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) verwenden.

Sie können beide verwenden, indem Sie folgendermaßen vorgehen:

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;
        }
    });
}
8
Chris Stillwell

Die Antwort von Arulx Z war genau das, wonach ich gesucht habe.

Ich schreibe eine App mit Navigation Drawer mit Recycling-Übersicht und Web-Ansichten, damit das Surfen im Internet in der App unabhängig von angeklickten Hyperlinks möglich ist (und der externe Webbrowser nicht gestartet wird). Dazu genügen die folgenden 2 Codezeilen:

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

genau unter Ihrer WebView-Anweisung.

Hier ist ein Beispiel meines implementierten WebView-Codes:

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

auf diese Weise wird jeder in der Website angeklickte Link in Ihr WebView geladen. (Verwenden von Android Studio 1.2.2 mit allen aktualisierten SDKs)

6