您还可以使用 Javascript 预加载图像。当图像加载时,附加它。如果失败,请执行其他操作,例如提供后备选项。在这里,您有一个显示可能解决方案的 JS 代码片段:
/**
* Tries to load an image and renders a fallback image if it fails.
* @param {string} srcImage The source of the image to load.
* @param {string} srcFallback The source of the fallback image.
*/
function loadImageOrFallback(srcImage, srcFallback) {
var image = new Image(),
timerFallback = null,
hasRenderedFallbackImage = false;
image.onload = function() {
if (timerFallback !== null) {
clear(timerFallback);
}
if (hasRenderedFallbackImage) {
// replace the fallback image
} else {
// append image to wherever you want
}
};
image.src = srcImage;
// since there is no way to detect an error when preloading the image,
// you can use a timeout function (here we are waiting 2 seconds)
timerFallback = setTimeout(function() {
var fallbackImage = new Image();
fallbackImage.src = srcFallback;
// append fallbackImage to wherever you want
hasRenderedFallbackImage = true;
}, 2000);
}
loadImageOrFallback('A_B_C.png', 'fallback.png');
使用 JavaScript 进行检查遵循试错法。超时也引入了一些延迟。如果您可以在服务器端检测到这种情况,那就更好了。
请注意,在渲染后备图像后可能会加载图像。这就是我们存储已附加后备图像并在onload
回调中检查其值的原因。
我准备了这个 jsFiddle来展示你将如何使用它。