Don't navigate to other pages in WebView,disable links and references

后端 未结 8 1739
再見小時候
再見小時候 2020-12-25 12:02

I have a webView in Android, and I open a html webpage in it. But it\'s full of links and images, and when I click one of them, it loads in my webview. I want to disable thi

相关标签:
8条回答
  • 2020-12-25 12:28

    You need to add an extra line of code, like so-

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

    And add an additional class MyWebViewClient like 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 讨论(0)
  • 2020-12-25 12:33

    Implement a WebViewClient and Just return true from this method of WebView Client

    webView.setWebViewClient(new WebViewClient(){
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return true;
        }
    });
    
    0 讨论(0)
  • 2020-12-25 12:38

    If you want to open inner link of a web page in different window then

    Don't use

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

    B'coz setWebViewClient() method is taking care of opening a new page in the same webview. So simple comment this line.

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

    Hope this will work.

    0 讨论(0)
  • 2020-12-25 12:38

    Using inject javascript On @Override onPageFinished

    view.loadUrl(
        javascript: (function () {
    
    
            document.addEventListener('click', function (e) {
                e.stopPropagation();
            }
                , true);
    
        })()
    );
    
    0 讨论(0)
  • 2020-12-25 12:39

    Very similar to Amit Gupta's answer, but I found a shorter way to do it.

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

    After this CustomWebViewClient is defined, set the client to the webview.

    CustomWebViewClient webViewClient = new CustomWebViewClient(urlToLoad);
    wv.setWebViewClient(webViewClient);
    
    0 讨论(0)
  • 2020-12-25 12:46

    You should save in a class variable your current url and check if it's the same with the loaded one. When the user clicks on a link the shouldOverrideUrlLoading is called and check the website. Something like this:

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

    Important: don't forget set the WebViewClient to your WebView.

    ourWebViewClient webViewClient = new ourWebViewClient(urlToLoad);
    wv.setWebViewClient(webViewClient);
    
    0 讨论(0)
提交回复
热议问题