Android WebView,如何处理应用程序中的redirect而不是打开浏览器
所以现在在我的应用程序中,我正在访问的URL有一个redirect,当发生这种情况时,WebView将打开一个新的浏览器,而不是留在我的应用程序。 有没有一种方法可以改变设置,使视图将像正常一样redirect到URL,但留在我的应用程序,而不是打开一个新的浏览器?
编辑:
我想要redirect的URL,我只是不知道如何创build它,所以唯一的方法来到这个URL是通过一个将导致redirect到我想要的。
例如:当你到这里时: http : //www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777请注意它是如何将URLredirect到实际产品的。 在我的应用程序中,如果我在一个新的浏览器中打开它,它会做的很好,但是如果我用一个WebView将它保存在我的应用程序中,它将显示为正在searchk = 9780735622777,如下所示: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0 。 或者,它会在浏览器中打开视图,并显示适当的内容。 但是,我想保留在我的应用程序的一切。
创build一个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 } });
根据官方文档 ,点击WebView中的任何链接都会启动一个处理URL的应用程序,默认情况下这是一个浏览器。 您需要覆盖像这样的默认行为
myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } });
只需添加一个默认的自定义WebViewClient
。 这使WebView处理任何加载的url本身。
mWebView.setWebViewClient(new WebViewClient());
加载url之前,您必须设置自定义的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. } });
检查处理redirectURL的示例代码,并在webview中打开PDF而不下载。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500
创build一个实现webviewclient的类并添加下面的代码,允许ovveriding如下所示的urlstring。 你可以看到这些例子
public class myWebClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }
在你的构造函数中,创build一个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() { // // }
下载演示