gpt4 book ai didi

android - Android WebView : intercept error 404 on one element (not entire page)

转载 作者:行者123 更新时间:2023-12-03 07:58:59 29 4
gpt4 key购买 nike

我正在尝试使WebView显示远程图像(进行某些样式调整)。通过使用引用了该远程IMG的HTML代码段加载WebView,可以完美地实现此目的。但是唯一的问题是,有时此远程图像不存在,从而导致图像图标损坏。

我想做的是拦截远程镜像的(不可用)并通过切换到另一个镜像来恢复。我尝试使用onReceivedError()WebViewClient,但是即使图像不可用,它也不会触发。

我当前的图像加载逻辑如下:

String url = "...";     // remote image URL
String html = String.format("<style>img{display: inline;" +
"height: auto;max-width: 100%%;}</style>" +
"<img src=\"%s\"></img>", url);

wv.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest req,
WebResourceError rerr) {
Log.e("WEB_VIEW_TEST", "error code: " + errorCode);
}
});

wv.loadData(html, "text/html", null);

我怀疑 onReceivedError()仅会触发页面级错误,而我不确定如何使它触发元素级错误。任何帮助将不胜感激。

PS。在输入此内容时,我只是想在JS中进行处理-也就是说,使用JS片段加载Webview,该片段尝试加载远程图像,并在出现错误的情况下加载另一个图像-所有这些都在JavaScript Realm 内。我会尝试的,如果可行,也会在此处发布。

最佳答案

好的,JavaScript解决方案有效,尽管仍然存在关于在Android real中进行拦截的问题。这是JavaScript的方式:

    String url = "...";         // real image
String backup_url = "..."; // backup image

WebView wv = (WebView) findViewById(R.id.fullImageWebView);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);

// FIXME: put into assets as an HTML file
String template = "" +
"<style>\n" +
" img {\n" +
" display: inline;\n" +
" height: auto;\n" +
" max-width: 100%%;\n" +
" }\n" +
"</style>\n" +
"\n" +
"<img id='image'></img>\n" +
"\n" +
"<script>\n" +
" var second_attempt = false;\n" +
" var img = document.getElementById('image');\n" +
" img.src = '%s';\n" +
"\n" +
" window.addEventListener('error', function(e) {\n" +
" if (!second_attempt) {\n" +
" second_attempt = true;\n" +
" img.src = '%s';\n" +
" }\n" +
" }, true);\n" +
"</script>";


String html = String.format(template, url, backup_url);
wv.loadData(html, "text/html", null);

关于android - Android WebView : intercept error 404 on one element (not entire page),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006280/

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