2013-10-17 2 views
15

Ich habe ein WebView in Android, und ich öffne eine HTML-Webseite in ihm. Aber es ist voll von Links und Bildern, und wenn ich auf eins von ihnen klicke, wird es in meinem Webview geladen. Ich möchte dieses Verhalten deaktivieren. Wenn ich also auf einen Link klicke, lade ihn nicht. Ich habe dies solution versucht und ein bisschen für mich selbst bearbeitet, aber nicht funktioniert. Mein webviewclient Code:Navigieren Sie nicht zu anderen Seiten in WebView, deaktivieren Sie Links und Referenzen

private boolean loaded = false; 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    if(loaded == false){ 
     view.loadUrl(url); 
     loaded = true; 
     return true; 
    }else{ 
     return false; 
    } 

} 

Meine webview Implementierung und Einstellungen.

WebView wv = (WebView) findViewById(R.id.recipeWv); 
    ourWebViewClient webViewClient = new ourWebViewClient(); 
    webViewClient.shouldOverrideUrlLoading(wv, URLsave); 
    wv.setWebViewClient(webViewClient); 
    wv.setFocusableInTouchMode(false); 
    wv.setFocusable(false); 
    wv.setClickable(false); 
    WebSettings settings = wv.getSettings(); 
    settings.setDefaultTextEncodingName("utf-8"); 

    settings.setLoadWithOverviewMode(true); 
    settings.setBuiltInZoomControls(true); 

Beispiel: Wenn der Benutzer geöffnet in meinem webview die Homepage und Stackoverflow klickt auf einen der Links (wie „Fragen“), dann die Webansicht auf der Homepage bleiben sollte Stackoverflow.

Antwort

18

Sie in einer Klassenvariablen Ihre aktuelle URL speichern soll und überprüfe, ob es mit dem geladenen identisch ist. Wenn der Benutzer auf einen Link klickt, wird der shouldOverrideUrlLoading aufgerufen und die Website überprüft. Etwas wie folgt aus:

private String currentUrl; 

public ourWebViewClient(String currentUrl) { 
    this.currentUrl = currentUrl; 
} 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.equals(currentUrl)) { 
     view.loadUrl(url); 
    } 
    return true; 
} 

Wichtig: nicht vergessen, die WebViewClient auf Ihre WebView gesetzt.

ourWebViewClient webViewClient = new ourWebViewClient(urlToLoad); 
wv.setWebViewClient(webViewClient); 
+0

Es funktioniert, sehr gut! – Dandelion

4

Wenn Sie inneren Link einer Webseite in verschiedenen Fenstern öffnen mögen, dann

nicht

WebView webView;//Your WebView Object 
webView.setWebViewClient(new HelpClient());// Comment this line 

b'coz setWebViewClient() Verfahren Pflege nehmen die Öffnung Verwenden Sie eine neue Seite im selben Webview. So einfach kommentieren Sie diese Zeile.

private class HelpClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.example.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 

Hoffe, das wird funktionieren.

+0

Ich will nicht auf andere Seiten, bleiben auf dem gleichen navigieren. So wie deaktivieren Sie die Referenzen und Links. – Dandelion

+0

@Dandelion Sie laden statische HTML-Seite von Assets oder es ist eine URL? –

+0

Es ist eine URL. Ich habe viele Referenzen in einer ListView, und wenn der Benutzer auf eine von ihnen klickt, öffnet es sich in einer Webansicht. – Dandelion

1

Sie benötigen eine zusätzliche Zeile Code zu schreiben, so-

webview.loadUrl(url); 
webview.setWebViewClient(new MyWebViewClient()); 

Und fügen Sie eine zusätzliche Klasse MyWebViewClient wie this-

/* Class for webview client */ 
class MyWebViewClient extends WebViewClient { 

// show the web page in webview but not in web browser 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    view.loadUrl(url); 

    return true; 
} 

@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(view, url); 
} 

@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    super.onPageStarted(view, url, favicon); 
} 

@Override 
public void onLoadResource(WebView view, String url) { 
    super.onLoadResource(view, url); 

} 

} 
+0

Ja ich benutze es, ich werde meine Frage mit der Implementierung aktualisieren. – Dandelion

+1

Ich habe meine Antwort aktualisiert. Dies scheint für mich gut zu funktionieren. Ich hoffe es hilft. – Anirudh

+0

Ich habe versucht, Ihre aktualisierte Antwort, aber die URLs funktioniert immer noch:/ – Dandelion

8

ein WebViewClient Implementieren und Just return true von dieser Methode der WebView-Client

webView.setWebViewClient(new WebViewClient(){ 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return true; 
    } 
}); 
+1

Korrekteste Art zu stoppen/zu verhindern, dass Webview eine URL im Inhalt öffnet. **** --- Es ist nur zum Anhalten-- **** –

Verwandte Themen