134

所以现在在我的应用程序中,我正在访问的 URL 有一个重定向,当这种情况发生时,WebView 将打开一个新的浏览器,而不是留在我的应用程序中。有没有办法可以更改设置,以便视图将像往常一样重定向到 URL,但留在我的应用程序中而不是打开新的浏览器?

编辑:

我想要重定向 URL,我只是不知道如何创建它,因此访问该 URL 的唯一方法是通过一个会导致重定向到我想要的 URL 的方法。

例如:当您访问此处时:http ://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 请注意它将如何将 URL 重定向到实际产品。在我的应用程序中,如果我在新浏览器中打开它,它会很好地执行此操作,但是如果我使用 WebView 将它保存在我的应用程序中,它会显示为好像正在搜索 k=9780735622777,如下所示:http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0。或者,它将在浏览器中打开视图并显示合适的内容。但是,我想将所有内容都保留在我的应用程序中。

4

7 回答 7

268

创建一个 WebViewClient,并重写shouldOverrideUrlLoading方法。

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        view.loadUrl(url);
        return false; // then it is not handled by default action
   }
});
于 2010-11-01T03:34:41.677 回答
26

根据官方文档,单击 WebView 中的任何链接都会启动一个处理 URL 的应用程序,默认情况下是一个浏览器。您需要像这样覆盖默认行为

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });
于 2013-09-20T16:47:15.763 回答
21

只需添加默认自定义WebViewClient即可。这使得 WebView 自己处理任何加载的 url。

mWebView.setWebViewClient(new WebViewClient());
于 2015-11-25T20:18:50.823 回答
10

在加载 url 之前,您必须为您的 webview设置自定义 WebviewClient 覆盖shouldOverrideUrlLoading方法。

mWebView.setWebViewClient(new WebViewClient()
        {
            @SuppressWarnings("deprecation")
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String url)
            {
                return shouldOverrideUrlLoading(url);
            }

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request)
            {
                Uri uri = request.getUrl();
                return shouldOverrideUrlLoading(uri.toString());
            }

            private boolean shouldOverrideUrlLoading(final String url)
            {
                Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url);

                // Here put your code

                return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false.
            }
        });

在 web 视图中查看用于处理重定向 url 和打开 PDF 而不下载的示例代码。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

于 2017-02-24T07:09:57.143 回答
3

创建一个实现 webviewclient 的类并添加以下代码,以允许 ovveriding url 字符串,如下所示。你可以看到这些[示例][1]

public class myWebClient extends WebViewClient {

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

在您的构造函数上,创建一个 webview 对象,如下所示。

   web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

然后添加以下代码以在您的应用程序中执行 url 加载

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    
    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 
   
 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }
于 2016-07-15T09:11:52.927 回答
3

请使用以下 kotlin 代码

webview.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {   
                view.loadUrl(url)
                return false 
            }
        })

更多信息请点击这里

于 2019-05-09T08:53:46.433 回答
0
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    if (url.equals("your url")) {
        
            Intent intent = new Intent(view.getContext(), TransferAllDoneActivity.class);
            startActivity(intent);
        
    }
}
于 2020-06-24T12:11:00.510 回答