当服务器发送HTML而不是图像数据时,是否有可能捕获失败的IMG加载?
Is it possible to catch failed IMG loads when the server sends HTML instead of image data?
我有一个网站,链接到其他网站上不同的图像。有时这些图像已被删除或域名不再有效,等等。为了不显示这些图像并删除它们,我使用jQuery这样做:
// catch image load errors
$( "img" ).error(function() {
// read out image source:
var src = $(this).attr('src');
// post the source to the server for the image to be removed
$.post("/pajax/image/notLoaded/", {url:src},
function success(obj) {
if(obj.status =='ok'){
console.log('removed: '+src);
}
},
"json" );
// hide the image & its container div
$( this ).hide();
$( this ).closest(".item-img").hide();
对于不再活动且没有发送数据的图像,这很好地工作。然而,通常发送的是HTML页面,在这种情况下,jQuery不会抛出错误,但控制台显示"资源被解释为图像,但以MIME类型text/HTML传输:"
是否有一种方法来捕捉这个与jQuery?
你的问题和这个很相似:
jQuery/JavaScript替换破碎图像
比起使用jQuery并尝试附加一个事件,我发现这样编写<img...>
元素是最可靠的:
<img src="image.png" onerror="this.style.display='none';"/>
我不知道jQuery是如何分配onerror
的,但是当MIME类型不匹配时,我成功地获得/处理了一个错误。
JSFiddle例子。
如果您仍然不能让它工作,我的下一个建议是发送一个AJAX请求并尝试检索MIME类型。我很确定,如果你是热链接,它不会工作,虽然。
你可以这样做:
var url = document.getElementsByTagName('img')[0].src
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.send(null);
console.log(xhr.getAllResponseHeaders());
//or
console.log(xhr.getResponseHeader("content-type"));
相关文章:
- 是否有可能在 WebBrowser 控件中调试 JavaScript 代码
- 是否有可能在 threejs 中创建一个工作的计算机界面
- 是否有可能访问JSON对象中列出的jQuery选择器
- 是否有可能在 JavaScript 中使用异步方法进行迭代
- 理论上是否有可能使用 chromium 的可安装网络应用程序 API 构建纯 JS bittorrent
- 是否有可能知道 jquery 可拖动元素将恢复到哪里
- jChartFX是否有可能根据(X,系列)自动将我的文本注释定位在图表上
- 是否有可能通过单击html页面上的按钮在我的Web服务器上运行c ++程序
- 是否有可能在具有内联样式的样式标签上使用XSS进行攻击
- 基于 Web 的应用程序是否有可能以某种方式访问智能手机的位置?并报告回来
- 来自 NodeJS 脚本的注释是否有可能产生内存问题
- 是否有可能/建议解析我的用户输入字符串 w 正则表达式
- 是否有可能知道用户何时点击YouTube视频上的广告
- 是否有可能将承诺的结果作为论据传递给 IIFE
- 是否有可能使用三个.js文件读取STEP文件
- 输入元素是否有可能具有没有焦点的光标
- 在 JavaScript 中是否有可能在指定点获取一个元素,如果它不在顶部但实际上可见
- Django View 是否有可能返回 JavaScript 函数
- 使用尾声,是否有可能在没有关联的情况下取回资源
- 是否有可能通过 pnacl 加速 webgl 矩阵乘法