gpt4 book ai didi

android - shouldoverrideurlloading 和 shouldinterceptrequest 之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 22:02:59 27 4
gpt4 key购买 nike

请告诉我方法 public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)public boolean shouldOverrideUrlLoading(WebView view, String url) 之间的区别。

>

我正在创建一个 android 应用程序,其中一个字符串作为我的 WebView 中单击事件的响应获得。我想存储这个字符串并显示它。我看到了这两种方法.我尝试使用 shouldOverrideUrlLoading 当我检查使用 google.com 作为我在 WebView 中加载的 url 创建示例应用程序并单击菜单时返回重定向 url。

谁能告诉我这两种方法的区别以及我应该使用哪一种?

最佳答案

Android WebKit 实现允许开发者修改 WebView通过android.webkit.WebSettings类如

  • 支持 JavaScript,
  • 支持插件,
  • 文件系统访问,
  • 资源检查等

资源检查中,可以通过重写 shouldOverrideUrlLoadingshouldInterceptRequest 方法检查对内容和/或资源的请求。 p>

但以上两种方法用于不同的目的,例如

1.shouldOverrideUrlLoading 在即将打开一个新页面时调用,而 shouldInterceptRequest 在每次加载资源时调用,如 css 文件、js 文件等.

2.如果用户在 WebView 中以交互方式请求资源,则可以通过使用 WebViewClient 类的 shouldOverrideUrlLoading 方法来拦截请求。示例代码如下所示。 Source

 private class MyWebViewClient extends WebViewClient {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.google.com")) {
return true;
}
return false;
}
}

当即将在当前 WebView 中加载新 URL 时,该方法使主机应用程序有机会接管控制权。返回值 true 表示宿主应用程序处理 URL,而返回 false 表示当前 WebView 处理 URL。上面的代码阻止从主机“www.google.com”加载资源。

但是,该方法不会拦截来自内部的资源加载,例如来自 HTML 或 SCRIPT 标记内的 IFRAME 或 src 属性。此外,XmlHttpRequests 也不会被拦截。为了拦截这些请求,您可以使用 WebViewClient shouldInterceptRequest 方法。示例代码如下所示。

@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
if (url.contains(".js")) {
return getWebResourceResponseFromString();
} else {
return super.shouldInterceptRequest(view, url);
}
}
private WebResourceResponse getWebResourceResponseFromString() {
return getUtf8EncodedWebResourceResponse(new StringBufferInputStream("alert('!NO!')"));
}
private WebResourceResponse getUtf8EncodedWebResourceResponse(InputStream data) {
return new WebResourceResponse("text/javascript", "UTF-8", data);
}

该方法将资源请求通知主机应用程序并允许应用程序返回数据。如果返回值为 null,则 WebView 将照常继续加载资源。否则,将使用返回响应和数据。上面的代码拦截对 JavaScript 资源 (.js) 的请求并返回警报而不是请求的资源。

查看更多信息:WebViewClient shouldOverrideUrlLoadingshouldInterceptRequest

关于android - shouldoverrideurlloading 和 shouldinterceptrequest 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26651586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com