我有一个网页,可以从外部源加载大量图像。其中一些图像链接可能会被破坏,我有一个脚本,onerror
如果未加载,则通过删除图像的属性调用该脚本(以及一些相关内容,如标题、一些标签...)。
在大多数情况下,这都可以正常工作,除非图像服务器向我发送默认图像来替换丢失的图像。在这种情况下,onerror
事件不会触发,我的页面会得到一个丑陋的默认图像。
我希望能够检测并消除这些图像。
1)有没有办法检测从img标签加载图像的状态代码(404)?(根据我所做的研究,这似乎不可能,但我仍在问......)。
2)如果#1 不可能,一种解决方案似乎是调用类似的方法来加载图像XMLHttpRequest
并查看响应代码。在这种情况下:
有没有更合适的方法呢XMLHttpRequest
?
我应该预料到 CORS 会带来很多问题吗?
XMLHttpRequest
:function imgLoad(url, onOk, onProblem) {
'use strict';
var request = new XMLHttpRequest();
request.open('GET', url);
request.responseType = 'blob';
request.onload = function () {
if (request.status === 200) {
onOk(request.response);
} else {
onProblem();
}
};
request.onerror = function () {
// if the request fails
onProblem();
};
request.send();
};
function onOk(response) {
var body = document.querySelector('body');
var myImage = new Image();
myImage.crossOrigin = ""; // or "anonymous"
var imageURL = window.URL.createObjectURL(response);
myImage.src = imageURL;
body.appendChild(myImage);
};
function onProblem(err) {
// remove the image and the other related elements
};
function loadImage(url) {
'use strict';
imgLoad(url, onOk, onProblem);
};
编辑:
回答@Oo,实际代码如下:
<img src="http://someimageurl.jpg" onerror="imgError(this);">
只是一个简单的 img 标签。该imgError功能是在图像未加载时删除与图像相关的元素的功能。但如果返回默认图像,则仅当不返回图像时才起作用。
慕姐4208626
相关分类