当你试图做你不应该做的事情时,我喜欢使用的一种策略是找到它已经适用于浏览器的地方,然后欺骗它为我工作。在跨域下载图片方面,浏览器已经在<img>
标签中实现了这个功能。
图像标签支持加载的 DOM 事件,如果图像加载成功,您可以使用该事件进行捕获。
缺点是您并不总是知道返回的图像是实际图像还是重定向图像,因为服务器现在配置为允许图像的热链接。您也没有迹象表明请求是否失败。
后一个缺点可以通过一个计时器来克服,虽然它不像你想要的那么强大,但可能仍然可以根据你的应用程序工作。
这是我编写的一些示例(即未经测试的)代码,以给您一个想法...
function isImagePathValid(src, callback) {
// Setup a timer to catch if it never loads
var fallback = setTimeout(function() {
callback(false);
}, 5000); // Wait 5 seconds
// Create a temp <img> tag and wait for it to load
$('<img style="position:absolute; top:-9999; left:-9999;" src="' + src + '" />')
.appendTo('body')
.load(function() {
clearTimeout(fallback);
callback(true);
});
}