Frage

Ich habe eine externe URL in meinem WebView geladen. Nun, was ich brauche, ist, dass, wenn der Benutzer klickt auf die Links auf der Seite geladen wird, es an die Arbeit wie ein normaler Browser hat, und öffnen Sie den Link in der gleichen WebView. Aber es ist den Standard-Browser öffnen und die Seite dort geladen?

Ich habe JavaScript aktiviert. Aber noch funktioniert es nicht. Habe ich etwas vergessen?

War es hilfreich?

Lösung

Wenn Sie eine WebView verwenden Sie finden sich die Klicks abfangen, wenn Sie die Standard-Android Verhalten nicht wollen.

Sie können Ereignisse in einem WebView Monitors mit einem WebViewClient . Die Methode, die Sie wollen, ist WebView Probe im SDK gibt es ein Beispiel, das tut genau das, 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;
    }
}

Andere Tipps

In einigen Fällen könnten Sie eine Überschreibung von onLoadResource benötigen, wenn Sie eine Umleitung bekommen, die nicht die URL Ladeverfahren auslöst. in diesem Fall habe ich versucht, die folgenden:

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

Dokumentation sagt, klicken Sie auf einen Link in einer WebView wird Start-Anwendung, die URLs verarbeitet. Sie müssen dieses Standardverhalten außer Kraft zu setzen

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

oder, wenn es keine bedingte Logik in der Methode einfach tun, um diesen

myWebView.setWebViewClient(new WebViewClient());

Fügen Sie diese 2 Zeilen im Code -

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

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

Sie können beide verwenden, indem Sie so etwas wie dies zu tun:

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

Antwort Arulx Zs war genau das, was ich suchte.

Ich schreibe eine App mit Navigationsleiste mit recyclerview und WebViews, für die Führung des Web-Browsing in der App unabhängig von Hyperlinks angeklickt (also nicht den externen Web-Browser starten). Dazu genügt es, die folgenden zwei Codezeilen zu setzen:

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

genau unter dem WebView-Anweisung.

Hier ist ein Beispiel meines implementiert WebView Code:

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, jeder Link auf der Website angeklickt wird in Ihrem WebView laden. (Mit Android Studio 1.2.2 mit allen aktualisierten SDK)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top