问题:通过对象标记查看图像设置作为数据时,Internet Explorer 11在通过Web服务器查看时不会显示它。以下是整个代码:
<!DOCTYPE html>
<html>
<head></head>
<body>
<div style="width:200px; height:100px"><img src="../../square.svg"/></div>
<div style="width:200px; height:100px"><embed src="../../square.svg"></div>
<div style="width:200px; height:100px"><object data="../../square.svg" type="image/svg+xml">Nope</object></div>
</body>
</html>
对于Firefox 28 / Chrome 34,如果我转到该文档的URL或在本地打开文档,则会显示所有3个方块。对于Internet Explorer 11,在本地查看时,所有方块都将显示。通过Web服务器查看时,仅显示前两个方块。对于第三个我得到&#34; Nope&#34;。我确实尝试使用.png来查看它是否与.svg相关,但我得到了相同的结果。最后,Firefox / Chrome的开发者工具的网络选项卡显示GET返回&#34; svg&#34;类型,但IE开发人员工具显示它返回类型&#34; text / html&#34;并且流产了。它是Web服务器,还是我做错了什么?
为了添加更多细节,我试图解决另一个问题时遇到了这个问题。所有这一切的最终目标是使用外部.svg图像来填充其容器(不保持其宽高比保持不变)。 Firefox似乎将.svgs视为&lt;中的普通图像。 IMG&GT;标签,我可以像平常一样拉伸它们。 Chrome似乎想要保持他们的宽高比,而IE则是一团糟。我希望将它们转换为&lt;对象&gt;我可以更多地强制.svgs,但我无法达到测试的目的。
编辑:好吧,我无法弄清楚这个问题,但我确实找到了解决原定目标的方法。我用ajax请求拉动.svg图像,修改viewBox / preserveAspectRatio / width和height属性,然后将svg对象放入内联。在缓存方面,这是非常糟糕的,并且确实让我很伤心,但它适用于我计划支持的所有浏览器。
请求标题成功:
GET http://127.0.0.1/file/square.svg HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://127.0.0.1/file/xxx/xxx/index3.html
Accept-Language: en-US
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 127.0.0.1
If-Modified-Since: Fri, 18 Apr 2014 03:31:10 GMT
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
Cookie: vendor_session=xxx
响应成功:
HTTP/1.1 304 Not Modified
content-type: image/svg+xml; charset=UTF-8
last-modified: Fri, 18 Apr 2014 03:31:10 GMT
date: Sat, 19 Apr 2014 01:23:12 GMT
cache-control: private, must-revalidate, max-age=86400
expires: Thu, 01 Jan 1970 00:00:00 GMT
content-length: 0
server: Vendor Web Server/Version
请求失败:
HEAD http://127.0.0.1/file/square.svg HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: 127.0.0.1
Content-Length: 0
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
Cookie: vendor_session=xxx
响应失败:
HTTP/1.1 405 Method Not Allowed
content-type: text/html; charset=UTF-8
date: Sat, 19 Apr 2014 01:33:01 GMT
cache-control: private, must-revalidate
expires: Thu, 01 Jan 1970 00:00:00 GMT
content-length: 839
server: Vendor Web Server/Version
答案 0 :(得分:4)
此处的问题是IE发出HEAD
请求以确定目标资源的内容类型。您的服务器配置为拒绝HEAD请求(这是一个错误的配置),因此它会导致HTTP错误而不是正确的响应。
<object data="../../square.svg" classid="clsid:30590066-98b5-11cf-bb82-00aa00bdce0b" type="image/svg+xml">Nope</object>
...但我可能只是重新配置服务器以禁止HEAD方法。