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
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;
}
}
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);
}
}
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());
Fügen Sie diese 2 Zeilen in Ihren Code ein -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
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;
}
});
}
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)