所以现在在我的应用程序中我正在访问的URL有一个重定向,当发生这种情况时,WebView将打开一个新的浏览器,而不是留在我的应用程序中.有没有办法可以更改设置,以便View像正常一样重定向到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.或者,它将在浏览器中打开视图并显示适当的内容.但是,我想在我的应用程序中保留所有内容.
创建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的应用程序,默认情况下该URL是一个浏览器.您需要覆盖这样的默认行为
myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } });
只需添加默认自定义即可WebViewClient
.这使得WebView可以处理任何已加载的URL本身.
mWebView.setWebViewClient(new WebViewClient());
在加载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. } });
在webview中查看用于处理重定向网址的示例代码,无需下载即可打开PDF. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500