1

有谁知道为什么这个页面http://emacsformacosx.com/中的相同代码在托管在本地 tomcat 服务器上时不会呈现?

我正在尝试使用一些 SVG,但看不到使其在本地工作。有任何想法吗?

4

4 回答 4

7

该页面是 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 类型是正确的。

于 2009-10-21T17:41:18.967 回答
2

您可能需要设置您的服务器来为 SVG 提供正确的 MIME 类型:image/svg+xml

更多信息在这里:http ://www.planetsvg.com/tools/mime.php

于 2009-10-16T12:42:37.500 回答
2

如果您使用的是 Apache 服务器,您可以指示这些图像使用哪种 mime 类型,只需将这两行添加到您的.htaccess文件中:

AddType image/svg+xml svg svgz
AddEncoding gzip svgz
于 2018-08-23T14:46:57.740 回答
1

正如 NickFitz 和 codedread 所提到的,要让嵌入式 SVG 工作,您的页面需要作为application/xhtml+xml. 使用 Tomcat 至少有三种方法可以实现这一点:

  1. 编辑您的服务器或应用程序web.xml以更改默认 MIME 类型或特定文件扩展名的MIME 类型。
  2. 如果您的页面是 JSP,请在页面指令中设置 contentType
  3. 如果您想适应 IE 用户,请根据HTTP 请求中发送的标头动态设置 contentType (我在移动设备的上下文中写过这种方法)。HTTP_ACCEPT

或者,将您的 SVG 内容拆分为单独的文件,那么您的页面是什么内容类型就无关紧要了。IE 不会呈现 SVG,但它至少会显示页面的其余部分。尽管仍然存在一些浏览器兼容性问题,但您可以将所有 SVG 从页面和指向它的链接中取出。

最后,如果您只想查看本地硬盘上嵌入了 SVG 且不涉及任何服务器的静态页面,则将文件扩展名从 更改.html.xhtml可能会起作用。

于 2009-10-24T21:34:55.307 回答