- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
请告诉我方法 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类如
在资源检查中,可以通过重写 shouldOverrideUrlLoading 和 shouldInterceptRequest 方法检查对内容和/或资源的请求。 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 shouldOverrideUrlLoading和 shouldInterceptRequest
关于android - shouldoverrideurlloading 和 shouldinterceptrequest 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26651586/
当在我的 WebView 中单击链接时,我使用 shouldoverrideurlloading 来触发函数。他们是一种在单击链接时阻止 webview 加载新屏幕的方法吗?我想做的就是当用户单击链接
我重写了 WebViewClient 的方法 shouldOverrideUrlLoading,当手机连接到互联网时它工作正常,但当互联网未连接时它不会接到电话。谁能解释可能是什么原因?我正在使用安卓
当我尝试显示 PDF 文件时,这段代码创建了一个无限循环,我该如何避免? 谢谢。 mWebview.setWebViewClient(new WebViewClient() { @O
如果我单击 web View 中的链接,则 shouldOverrideUrlLoading() 永远不会被调用。(它不显示 toast 或记录任何内容)。我也尝试过 onPageFinished 并
我正在使用这种方法 -并返回 true 或 super.shouldOverrideUrlLoading(view,url);我为自己的天真道歉,但我不明白返回 true 或父类(super clas
我将 shouldOverrideUrlLoading 方法用于针对多个客户端进行个性化设置的应用程序。每个客户端都有自己的网页,需要加载到 webview 中。我的问题是:该应用程序非常适合客户 A
在我的应用程序中,shouldOverrideUrlLoading() 未在 4.0.3 版本上调用。我已经在 2.2 和 4.0.1 上测试过,它们都工作正常。设备名称是 HTC verizon。
我正在尝试在 webview 中加载 URL 但它没有调用 shouldOverrideUrlLoading webview.setWebViewClient(new HelloWebViewCli
嗨,这对我不起作用: webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrl
我以html格式调用本地存储中的文件并在webview中显示。在我的 html 中包含一个 url,它将单击并显示在同一个 webview 中。但是当我调用 shouldOverrideUrlLoad
在我的应用程序中,第一次有一个登录屏幕显示在 WebView 中。在该屏幕中将出现一个弹出窗口,其中包含用户名和密码。在按下登录按钮时提供详细信息后,提交用户名和密码,它将调用 php 代码进行用户名
我的代码: public class View_WebView extends Activity { WebView myWebView; private class MyW
public WebView mywebview; @Override protected void onCreate(Bundle savedInstanceState) { super.o
我正在尝试弄清楚如何在 Swift for IOS 中使用 shouldOverrideUrlLoading (Android)。我想从 webview 中捕获 URL 而不是加载该 URL。 swi
我正在制作一个电子书阅读器,它使用 epub 格式将书籍加载到 webview 中。在某些书中,同一章的某些部分有一个 anchor 链接。每章都以 html 格式加载。这是链接的样子 file://
问题很简单。在应用程序中,我们希望跟踪显示的当前 url。为此,我们使用来自 WebViewClient 的 shouldOverrideUrlLoading 回调,方法是在每次更新时将 url 保存
我正在使用 WebViewClient.shouldOverrideUrlLoading捕捉 WebView 中的任何链接点击。这在大约 95% 的时间都有效,但有时根本不会被调用。 我在这三种情况下
在我的应用程序中,在 Honeycombe 3.2 版本上未调用 shouldOverrideUrlLoading()。我已经在 2.2 和 4.0.1 上测试过,它们都工作正常。 这是 Honeyc
我的应用程序中有这段代码: public class Home extends Activity{ @Override public void onCreate(Bundle savedInstanc
HTML 文件中有两种类型的链接: (1) A normal link like http://www.bbb.com/q?type=normal (2) A short link like /q?t
我是一名优秀的程序员,十分优秀!