javascript - 在 Chrome 中预加载的图片无法显示
我正在预加载一些图片,然后在一个灯箱中使用它们。我遇到的问题是,虽然图片正在加载,但浏览器并没有显示它们。
这个问题是 Chrome 特有的。它在 Chrome 8 到 10 中一直存在,我一直断断续续地尝试修复它,但始终没有结果。
我已经阅读了这些类似的问题,
Chrome未显示图像,尽管资源已传送到浏览器
2个小的跨浏览器CSS问题。背景图像在Google Chrome中不显示?
JavaScript预加载的图像正在被重新加载
所有这些都描述了类似的行为,但发生在Mac版的Chrome上。而这现在发生在Windows上。
- 其他所有浏览器似乎都没问题。
- 如果你同时打开了 Firefox 和 Chrome,在 Firefox 中加载页面,然后在 Chrome 中,图片就会显示。
- 一旦你使用 Webkit webdev 工具栏手动加载了图像,它们总是会显示出来
- 所有的链接、图片等都正常并且可以使用
- 清除 Chrome 中的所有内容似乎没有任何效果(缓存、历史记录等)
如果有人有任何想法,那将非常有帮助,因为我这里真的已经没有任何选择了。
附言,如果回复晚了请见谅,我明天开始放假一周!:D
更新 这是正在预加载图像的 JavaScript 函数。
var preloaded = new Array();
function preload_images() {
for (var i = 0; i < arguments.length; i++){
document.write('<');
document.write('img src=\"'+arguments[i]+'\" style=\"display:none;\">');
};
};
更新
我仍然遇到这个问题,而且我已经删除了整个预加载图片的功能。也许通过 document.write() 提供样式表不是最好的方法?
答案#1
Chrome 可能不会预加载它们,因为它正在向 DOM 写入内容而没有显示,所以它可能足够智能,能够意识到不需要渲染。请改为尝试这个:
var preloaded = new Array();
function preload_images(){
for (var x = 0; x < preload_images.arguments.length; x++)
{
preloaded[x] = new Image();
preloaded[x].src = preload_images.arguments[x];
}
}
JavaScript 图像对象还有许多可能对你有用的功能:
http://www.javascriptkit.com/jsref/image.shtml
onabort()
当用户中止下载图像时,代码会被执行。
onerror()
当加载图像时发生错误(例如:未找到)时,将执行代码。示例
onload()
当图像成功且完全下载时,代码会被执行。
然后你还有 complete 属性,它的 true/false 值告诉你图片是否已经完全(预)加载。
答案#2
事实证明,如果缓存被错误地设置为过期,Chrome 会考虑 HTTP 缓存,并在预加载后立即丢弃任何预加载的图像。
在我的情况下,我是动态生成图像的,默认情况下响应会立即发送到浏览器并立即过期。
要修复它,我必须设置以下内容:
Response.Cache.SetExpires(DateTime.Now.AddYears(1));
Response.Cache.SetCacheability(HttpCacheability.Public);
return File(jpegStream, "image/jpeg");
