网站搜索

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");