web-dev-qa-db-ja.com

WebViewの他のページに移動しないで、リンクと参照を無効にします

AndroidにwebViewがあり、その中にhtml Webページを開きます。しかし、それはリンクと画像でいっぱいであり、それらのいずれかをクリックすると、私のウェブビューにロードされます。この動作を無効にしたいので、リンクをクリックしてもロードしないでください。私はこれを試してみました solution と自分のために少し編集しましたが、うまくいきませんでした。私の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);

例:ユーザーが私のWebビューでStackOverflowホームページを開き、リンク(「質問」など)のいずれかをクリックすると、WebビューはStackOverflowホームページにとどまるはずです。

21
Dandelion

現在のURLをクラス変数に保存し、ロードされたURLと同じかどうかを確認する必要があります。ユーザーがリンクをクリックすると、shouldOverrideUrlLoadingが呼び出され、Webサイトを確認します。このようなもの:

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

重要:WebViewClientWebViewに設定することを忘れないでください。

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

WebViewClientを実装し、WebView Clientのこのメソッドからtrueを返すだけです

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

Webページの内部リンクを別のウィンドウで開く場合

使用しない

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

B'coz setWebViewClient()メソッドは、同じWebビューで新しいページを開く処理を行っています。この行を簡単にコメントしてください。

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
Amit Gupta

私も同じ問題に直面していました。以下のようにこの問題を解決しました

webView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        return true;
                    }
                });

ラムダ式を使用

webView.setOnTouchListener((v, event) -> true);
2

次のようなコードを追加する必要があります。

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

}

}
1
Anirudh

アミット・グプタの答えと非常に似ていますが、私はそれを行うより短い方法を見つけました。

private String currentUrl;

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

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

このCustomWebViewClientを定義したら、クライアントをWebビューに設定します。

CustomWebViewClient webViewClient = new CustomWebViewClient(urlToLoad);
wv.setWebViewClient(webViewClient);
0
Grace Shao