gpt4 book ai didi

java - HTML 中 CSS 文件的绝对网络路径?

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:54 27 4
gpt4 key购买 nike

我维护一个用 Java 编写的小型 ERP 系统;此应用程序创建 XHTML 报告,这些报告使用存储在文件服务器中央目录中的 CSS 表设置样式。这是在异构环境中:Linux、Windows 和各种浏览器。生成到 CSS 文件的适当链接被证明是困难的。应该像这样引用 CSS 文件:

<link rel="stylesheet" type="text/css" href="file:/server/path/to/file.css" />

这是在 Java 中使用 File.toURI() 生成的,但是,它在 Windows 下不起作用。事实证明, 的作用因浏览器和操作系统而异:

  • 在 Linux 下,“file:”协议(protocol)是可选的。您可以以 1、3、4 或 5 个斜杠(但不能是 2 个)开始路径。 Chromium 和 Firefox 也是如此。
  • 在 Windows 下,如果您省略“file:”,那么 IE 会坚持使用恰好 2 个斜杠作为路径的开头,而 Firefox 坚持恰好使用 5 个斜杠。如果包含“file:”协议(protocol),那么 IE 将接受 2、4 或 5 个斜杠; Firefox 仍然需要恰好 5 个斜杠。

所以唯一似乎适用于所有系统和浏览器的变体是

<link rel="stylesheet" type="text/css" href="file://///server/path/to/file.css" />

对此的解释,尽我所能:URI 中的三个斜杠表示本地文件系统上的上下文。 Windows 网络路径将以两个反斜杠开头,但 URI 中不允许使用反斜杠,因此它们显然变成了两个额外的正斜杠。

URI syntax specification 中没有这样的内容.也没有简单的方法来生成像这样奇怪的 URI——你必须自己添加额外的斜杠。

我觉得必须有更好的方法以独立于平台的方式处理本地资源的链接。我错过了什么?

最佳答案

如果其他人最终发布了更好的答案,我会接受。同时,这是我想出的解决方法(在 Java 中)。重点是生成始终以“file://///”开头的 URI。

/**
* This method produces a URI than can be embedded in HTML to reference a file in the local
* network, for example, a CSS file. The only format that seems to work across browsers and
* operating systems is one containing five slashes, i.e., file://///server/path/to/file.css.
* Firefox is the most difficult browser to please, particularly under Windows.
*
* Note that the toString() and getPath() methods of the URI object product different results
* depending on the operating system; hence, we must remove all slashes from the start of the
* path, before adding what we want.
*
* @param fileIn
* A file object referencing the file
* @return A string that can be embedded as a URI in an HTML file
*/
private String fixHtmlUri(File fileIn) {
URI uri = fileIn.toURI();
String path = uri.getPath();

// Remove all slashes from the beginning of the path
int numSlashesAtStart = 0;
while (path.charAt(numSlashesAtStart) == '/') numSlashesAtStart++;
String strippedUriString = path.substring(numSlashesAtStart);

// Add the require five slashes plus the file protocol
return "file://///" + strippedUriString;
}

关于java - HTML 中 CSS 文件的绝对网络路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31676259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com