这似乎与许多其他问题重复。请相信我不是。
我正在尝试将html数据加载到WebView
,以便能够捕获用户超链接请求。在这个过程中,我发现this answer完全符合我的要求,除了它捕获对CSS文件和图像之类的其他请求:
// you tell the webclient you want to catch when a url is about to load
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
return true;
}
// here you execute an action when the URL you want is about to load
@Override
public void onLoadResource(WebView view, String url){
if( url.equals("http://cnn.com") ){
// do whatever you want
}
}
我关闭了自动图片加载,网络加载和Javascript执行:
settings.setBlockNetworkLoads(true);
settings.setBlockNetworkImage(true);
settings.setJavaScriptEnabled(false);
但这些都无法阻止捕获这些请求。
也许有一个不同的过程来捕获链接点击,但它或者是这个或停止加载外部资源。
如何阻止WebView
捕获(或尝试加载)CSS,JS或图像等资源请求?
否则,如果我无法阻止捕获或尝试加载,我如何区分所点击的链接和网络资源?
提前致谢!
答案 0 :(得分:0)
您可以覆盖WebViewClient的shouldInterceptRequest并返回一些非空响应,而不是正在获取的CSS,JS,图像等。
示例:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.d(TAG, "shouldInterceptRequest: " + url);
if (url.contains(".css")
|| url.contains(".js")
|| url.contains(".ico")) { // add other specific resources..
return new WebResourceResponse(
"text/css",
"UTF-8",
getActivity().getResources().openRawResource(R.raw.some_css));
} else {
return super.shouldInterceptRequest(view, url);
}
}
其中R.raw.some_css
是:
body {
font-family: sans-serif;
}
注意:
我不确定你正在加载哪些页面,但这种方法可能会破坏页面的外观。
答案 1 :(得分:0)
简短的回答是,你不能。
更长的答案可能是这样的:你无法做到这一点,因为它被设计为“捕获全部或捕获任何东西"”。 Web请求是一般概念,不依赖于像图像或CSS这样的特定资源 - 实际上,它没有任何关于什么的线索。这就是为什么你找不到任何东西的原因。
这样做:在> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] bartpkg_0.1.0 packrat_0.4.8-1 Rcpp_0.12.8 msm_1.6.4 LaplacesDemon_16.0.1
loaded via a namespace (and not attached):
[1] roxygen2_5.0.1 lattice_0.20-34 mvtnorm_1.0-5 digest_0.6.10 grid_3.3.1 magrittr_1.5
[7] stringi_1.1.2 Matrix_1.2-7.1 splines_3.3.1 tools_3.3.1 stringr_1.1.0 survival_2.39-5
[13] parallel_3.3.1 rsconnect_0.5 inline_0.3.14 expm_0.999-0
中,不是一直返回shouldOverrideUrlLoading
,而是只为自己想要处理的网址返回true。对于所有其他情况,例如css等,您返回true
,因此webview将为您处理。
例如:
false