Android WebView,如何处理应用程序中的重定向而不是打开浏览器

时间:2010-11-01 03:13:06

标签: android android-webview

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

编辑:

我想要重定向URL,我只是不知道如何创建它,所以获取该URL的唯一方法是通过一个导致重定向到我想要的URL。

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

7 个答案:

答案 0 :(得分:228)

创建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
   }
});

答案 1 :(得分:16)

根据官方documentation,点击WebView中的任何链接都会启动一个处理URL的应用程序,默认情况下是一个浏览器。您需要覆盖此类

之类的默认行为
    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

答案 2 :(得分:12)

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

mWebView.setWebViewClient(new WebViewClient());

答案 3 :(得分:7)

在加载网址之前,您必须设置自定义WebviewClient覆盖webview的 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.
            }
        });
  

在webview中查看处理重定向网址的示例代码,无需下载即可打开PDF。   https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

答案 4 :(得分:2)

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

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

然后添加以下代码以在您的应用内部执行网址加载

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 

 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }

<强> Download demo

答案 5 :(得分:0)

请使用下面的kotlin代码

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

有关更多信息,请单击here

答案 6 :(得分: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);
        
    }
}