有谁知道为什么这个页面http://emacsformacosx.com/中的相同代码在托管在本地 tomcat 服务器上时不会呈现?
我正在尝试使用一些 SVG,但看不到使其在本地工作。有任何想法吗?
有谁知道为什么这个页面http://emacsformacosx.com/中的相同代码在托管在本地 tomcat 服务器上时不会呈现?
我正在尝试使用一些 SVG,但看不到使其在本地工作。有任何想法吗?
该页面是 XHTML,因此应使用适当的 Content-Type 标头提供。如果页面以 text/html 的形式提供,那么 Firefox 和 Chrome(我检查过的仅有的两个)将无法识别 SVG 工作所需的 XML 命名空间。
尽管实时页面与标题一起提供
Content-Type: text/xml; charset=UTF-8
严格来说,这并不正确。在我的测试中,与
Content-Type: application/xhtml+xml; charset=UTF-8
使其正确呈现,并且是 XHTML 的适当类型。
请注意,您必须在服务器上检测 Internet Explorer(和其他不理解 XHTML 的浏览器)并将内容类型更改为text/html
- 如果显示application/xhtml+xml
内容类型 IE 将提示用户下载文件;因为text/xml
它将显示打印精美的 XML 文档树(尽管有时它会感到困惑并设法通过内容嗅探正确显示 HTML)。
编辑:正如 codedread 所说,如果你想提供原始 SVG 文件,你需要使用 SVG 内容类型,但在这种情况下,文件实际上是 XHTML,内联 SVG 在单独的命名空间中,所以 XHTML 类型是正确的。
您可能需要设置您的服务器来为 SVG 提供正确的 MIME 类型:image/svg+xml
如果您使用的是 Apache 服务器,您可以指示这些图像使用哪种 mime 类型,只需将这两行添加到您的.htaccess
文件中:
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
正如 NickFitz 和 codedread 所提到的,要让嵌入式 SVG 工作,您的页面需要作为application/xhtml+xml
. 使用 Tomcat 至少有三种方法可以实现这一点:
HTTP_ACCEPT
或者,将您的 SVG 内容拆分为单独的文件,那么您的页面是什么内容类型就无关紧要了。IE 不会呈现 SVG,但它至少会显示页面的其余部分。尽管仍然存在一些浏览器兼容性问题,但您可以将所有 SVG 从页面和指向它的链接中取出。
最后,如果您只想查看本地硬盘上嵌入了 SVG 且不涉及任何服务器的静态页面,则将文件扩展名从 更改.html
为.xhtml
可能会起作用。