IE8不显示图像(红色x)......有时候

时间:2010-11-15 19:48:30

标签: javascript image http internet-explorer-8

我很生气,以下问题在任何其他浏览器(Chrome,Firefox)上都没有发生:

  • 清除IE8缓存
  • 浏览器启动会打开请求并动态创建一些图像的HTML / Javascript页面。此HTML页面由Tomcat服务器localhost:8084提供。
  • 在请求的10张图片中,大部分时间IE都会显示RED X.
  • 开发者图像报告(F12)将某些图像“文件大小”显示为正确的#字节,但图像仍未显示,或者某些图像文件大小为“未知字节”且图像不起作用。
  • 有时候,有10个图像中有2-4个出现,其余的图像都会失败!
  • 有时候在疯狂的狂热中,有10亿次刷新,图像会出现。
  • 真正的问题是,当我在HTTP服务器中设置断点时,套接字甚至没有打开。在失败之前,IE甚至没有尝试从服务器获取图像。
  • 最后,如果我运行相同的代码但是从谷歌地图等某个地方请求图像,它可以在IE中正常运行。

这是我的javascript代码:

<script type="text/javascript">
    var ctr = 0;
    function getImage(url)
    {
        var img = document.createElement("img");
        img.src = url + "&nc=" + ctr;
        ctr ++;
        img.width = 128;
        img.height = 128;
        document.body.appendChild(img);
    }

    for (var i = 0; i < 10; i=i+1)
    {
        //THIS FAILS MOST OF THE TIME
        setTimeout("getImage('http://myHostName:9980/GenerateImageStatic?parameter=1')", 1000);
        //THIS WORKS! WHY?
        //setTimeout("getImage('http://maps.google.com:80/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap&markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.012318&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false')", 1000);
    }
</script>

对于HTTP Server我正在使用BOOST示例ASIO HTTP Server Link我修改了它以便对任何URI请求,它发送一个png文件(我已经尝试了各种文件以确保它不是PNG编码那么糟糕)。 HTTP标头具有Content-type:“image / png”。所以发送了正确的mime类型。

我一直试图找到解决方案很长一段时间。阅读各种帖子:

  • Mime type is the problem。在我的情况下,Mime类型不是问题。我设置了Content-type。我还使用了Firefox LiveHTTPHeader插件来查看从服务器发送的标头。除了一些缓存控制标头之外,我的标头与Google内容类型的内容相同:
  • Security error。好吧,也许跨域图像存在安全风险。或者某些东西阻止了请求。那么为什么它不会100%失败?!为什么IE不请求任何跨域图像?然而,maps.google.com请求有效,而我的有时只能使用。同样适用于任何防火墙或防病毒软件。我也尝试在各种端口上运行服务器(80,8080,9980)。
  • Javascript error。我认为Javascript是正确的。我实际上遇到了与GWT相同的问题。所以我认为GWT就是问题所在。 IE和GWT存在与图像相关的事件错误。所以我将代码简化为Javascript。没有GWT。
  • 也许这是C ++ HTTP Server的实现。这是一种可能性。但Firefox和Chrome使用相同的代码没有问题。

有什么想法吗? 感谢。

修改 我将myHostName添加到可信站点。我还将内部和互联网站点的安全设置降低到了低。如果启用,我将尝试在服务器上禁用keepalive。但是正如我所提到的,我没有看到IE尝试获取图像。套接字没有收到来自IE的任何请求,因此从头文件中删除keep-alive可能没有帮助。

5 个答案:

答案 0 :(得分:12)

检查图像的颜色模式。

我偶然在Photoshop中将图像的颜色模式从RGB8切换到CMYK,并遇到了同样的问题。 IE8无法显示图像,而Firefox根本没有问题。

答案 1 :(得分:1)

我相信在IE中你需要在将元素附加到DOM后设置源,否则它将无法正确呈现。

答案 2 :(得分:1)

这听起来像是服务器的问题。要尝试的一些事情,以缩小问题范围:

查看它是否静态运行。这是一个包含这些图像的平面html页面。他们出现了吗?

尝试更改它,以便您的计时器执行一个循环的单个函数,而不是循环调用计时器。

让它做一个document.write(在页面加载时,没有任何计时器),只需为元素编写html(以及url,这样你就可以看到它在做什么)

让它做,而不是使用计时器,以响应单击页面上的按钮。让它一次做一个图像。

我认为如果你尝试所有这些事情,你可能会遇到问题,但如果没有,请报告发生的事情。

答案 3 :(得分:1)

我在IE8中没有显示的图像存在同样的问题,但在其他浏览器中也没问题。本地保存的文件甚至就是这种情况。如果我用IE8打开,我会得到红色x,但是其他所有程序都显示正常。我查看了图像的属性,它们起源于Photoshop,所以我猜测它是如上所述的CMYK问题。如果我使用RGB项目保存此图像,问题就解决了。

答案 4 :(得分:0)

是的,我仍然不知道问题是什么。 人们一直在暗示它是CMYK。如果该解决方案适合您,那很好。我一直在使用libPNG进行编码和RGB。 CMYK对我来说不是问题。

我使用Boost / asio http服务器示例#3实现了HTTP服务器。以及Java Servlet。同样的问题。有时它有效,有时它不会

我放弃了。