我对以下问题感到抓狂,这在任何其他浏览器(Chrome、Firefox)上都不会发生:
- IE8缓存被清除
- 浏览器启动时会打开 HTML/Javascript 页面,该页面会动态请求并创建一些图像。此 HTML 页面由 Tomcat 服务器 localhost:8084 提供。
- 大多数情况下,IE 请求的 10 个图像中显示 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 服务器,我使用 BOOST 示例 ASIO HTTP 服务器Link http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html#boost_asio.examples.http_server_3我修改了它,因此对于任何 URI 请求,它都会发送一个 png 文件(我尝试了各种文件以确保它不是不好的 PNG 编码)。 HTTP 标头的内容类型为:“image/png”。因此发送了正确的 mime 类型。
很长一段时间以来我一直在努力寻找解决方案。阅读各种帖子:
-
Mime 类型是问题 http://www.technologyquestions.com/technology/internet-explorer/374551-red-x-ie8-if-png-used.html。 Mime 类型对我来说不是问题。我设置了内容类型。我还使用 Firefox LiveHTTPHeader 插件来查看从服务器发送的标头。除了一些缓存控制标头之外,我的标头在内容类型方面与谷歌发送的相同:
-
安全错误 https://stackoverflow.com/questions/1866046/png-images-display-in-ie8-alone-but-not-inside-a-page。好吧,也许跨域图像存在安全风险。或者有什么东西阻止了请求。那么为什么它不会 100% 失败呢?!为什么IE不请求跨域图片?然而,maps.google.com 请求有效,而我的请求仅有时有效。这同样适用于任何防火墙或防病毒软件。我还尝试在各种端口(80、8080、9980)上运行服务器。
-
JavaScript 错误 https://stackoverflow.com/questions/2233900/image-not-appearing-in-ie7-or-ie8。我认为Javascript是正确的。事实上,我在使用 GWT 时也遇到了同样的问题。所以我认为问题出在 GWT 上。 IE 和 GWT 存在与图像相关的事件错误。所以我将代码简化为 Javascript。没有 GWT。
- 也许这是 C++ HTTP Server 实现。这是一种可能性。然而 Firefox 和 Chrome 使用相同的代码没有问题。
有任何想法吗?
谢谢。
EDIT我将 myHostName 添加到受信任的站点。我还将内部和互联网站点的安全设置降低到低水平。如果启用的话,我将尝试禁用服务器上的保活。然而,正如我提到的,我根本没有看到 IE 尝试获取图像。套接字不会收到来自 IE 的任何请求,因此从标头中删除 keep-alive 可能没有帮助。
检查您的图像处于什么颜色模式。
我不小心在 Photoshop 中将图像的颜色模式从 RGB8 切换为 CMYK,并遇到了同样的问题。 IE8 会无法显示图像,而 Firefox 则完全没有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)