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

所以现在在我的应用程序中,我正在访问的 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。或者,它将在浏览器中打开视图并显示适当的内容。但是,我想把所有的东西都放在我的应用程序里。

179472 次浏览

创建 WebViewClient,并重写 应该覆盖 UrlLoding方法。

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

创建一个实现 webviewclient 的类,并添加以下代码,该代码允许重写如下所示的 url 字符串。 您可以看到这些 < strong > [ example ][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));

然后添加以下代码来执行加载应用程序中的网址

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

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

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

在加载 URL 之前,您必须为您的 webview 设置自定义 WebviewClient 重写 应该覆盖 UrlLoding方法。

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

查看处理重定向 URL 的示例代码,在 webview 中打开 PDF 而不需要下载。 Https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

请使用下面的 kotlin 代码

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

更多信息请点击 给你

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

}
}

科特林中,对于 在同一个 webView 中导航,我们需要为 webview 覆盖 应该覆盖 UrlLoding

如果返回类型是 没错,那么导航将被阻止如果返回 类型是 假的,然后导航将发生

    object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, request:  WebResourceRequest): Boolean {


return true
}
}.also { webView.webViewClient = it }