Не переходите на другие страницы в WebView, отключите ссылки и ссылки

У меня есть webView на Android, и я открываю в нем веб-страницу html. Но он полон ссылок и изображений, и когда я нажимаю один из них, он загружается в моем веб-просмотре. Я хочу отключить это поведение, поэтому, если я нажму ссылку, не загружайте его. Я пробовал это решение и немного отредактировал для myselft, но не работал. Мой код webviewclient:

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

}

Моя реализация и настройки веб-браузера.

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

Пример. Если пользователь открывает в моем веб-сайте домашнюю страницу StackOverflow и нажимает на одну из ссылок (например, "Вопросы" ), веб-просмотр должен оставаться на главной странице StackOverflow.

Ответ 1

Вы должны сохранить в переменной класса текущий URL-адрес и проверить, совпадает ли он с загруженным. Когда пользователь нажимает на ссылку, вызывается shouldOverrideUrlLoading и проверяет веб-сайт. Что-то вроде этого:

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

Важно: не забудьте установить WebViewClient на WebView.

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

Ответ 2

Внедрить WebViewClient и просто вернуть true из этого метода WebView Client

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

Ответ 3

Если вы хотите открыть внутреннюю ссылку веб-страницы в другом окне, то

Не используйте

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

B'coz setWebViewClient() метод заботится о том, чтобы открыть новую страницу в том же webview. Так просто прокомментируйте эту строку.

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

Надеюсь, что это сработает.

Ответ 4

Вам нужно добавить дополнительную строку кода, например:

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

И добавьте дополнительный класс MyWebViewClient как это -

/* 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);

}

}