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

标签 javascript image http internet-explorer-8

我对以下任何其他浏览器(Chrome、Firefox)都不会发生的问题感到生气:

  • IE8 缓存已清除
  • 浏览器启动并打开 HTML/Javascript 页面,该页面动态请求并创建一些图像。此 HTML 页面由 Tomcat 服务器 localhost:8084 提供。
  • IE 请求的 10 张图像中的大部分时间都会显示 RED X。
  • Developer Image Report (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 服务器,我使用 BOOST 示例 ASIO HTTP 服务器 Link我修改了它以便对于任何 URI 请求,它发送一个 png 文件(我尝试了各种文件以确保它不是 PNG 编码是错误的)。 HTTP header 具有 Content-type:“image/png”。因此发送了正确的 MIME 类型。

长期以来,我一直在努力寻找解决方案。阅读各种帖子:

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

有什么想法吗? 谢谢。

编辑 我将 myHostName 添加到受信任的站点。我还将内部和互联网站点的安全设置降低到低。如果启用,我将尝试禁用服务器上的 keepalive。然而,正如我提到的,我根本没有看到 IE 试图获取图像。套接字没有收到来自 IE 的任何请求,因此从 header 中删除 keep-alive 可能没有帮助。

最佳答案

检查您的图像所处的颜色模式。

我在 Photoshop 中不小心将图像的颜色模式从 RGB8 切换为 CMYK,遇到了同样的问题。 IE8 将无法显示图像,而 Firefox 则完全没有问题。

关于javascript - IE8 不显示图像(红色 x)...有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188203/

相关文章:

javascript - 使用 :last-child and :first-child with jQuery

javascript - 雅虎怎么样?图像搜索加载其图像?

web-services - 是否可以使用 SoapUI 来测试 SPNEgo 保护的服务?

angular - this.interceptor.intercept 不是函数 Angular 8

javascript - MVC 5 javascript 未触发

javascript - 我应该以及如何在 promise 回调中转换 transitionToRoute

javascript - jQuery timpicker 方法内的 Angular2 组件上下文

java - 使用 BufferedImage 图像不会出现在 JPanel 中

android - 如何在触摸android中图像的特定位置时创建一个点

javascript - 使用 javascript 将文件附加到输入类型 ="file"