gpt4 book ai didi

javascript - 阻止 Android WebView 尝试在 loadData() 上加载/捕获 CSS 等资源

转载 作者:行者123 更新时间:2023-11-28 02:47:29 25 4
gpt4 key购买 nike

背景

这似乎与许多其他问题重复。相信我,事实并非如此。

我正在尝试将 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 或图像?

否则,如果我无法阻止捕获或尝试加载,我如何区分点击的链接和网络资源?

提前致谢!

最佳答案

您可以覆盖 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;
}

注意:
我不确定您正在加载哪些页面,但这种方法可能会破坏页面的外观。

关于javascript - 阻止 Android WebView 尝试在 loadData() 上加载/捕获 CSS 等资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922547/

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