为什么 jsdom 将我的属性 *values* 设置为全部小写?

Why does jsdom set my attribute *values* to all lowercase?

这里是示例代码。 运行 在网络风暴中。 "jsdom": "^13.2.0" 节点 10.15.0

const jsdom = require("jsdom");
const {JSDOM} = jsdom;

dom = new JSDOM("");
uri = "file://testResource/test.js"
const script = dom.window.document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.setAttribute("src",uri);

console.log(`loading script ${script.src}`); //loading script file://testresource/test.js
console.log(`loading script ${uri}`); //loading script file://testResource/test.js

注意资源一词的大小写变化。 我知道属性名称不区分大小写,但值应该是,不是吗?

URI 的书写方式 testResource 部分是主机名。主机名不区分大小写,URI Generic Syntax (RFC3986) 状态:

Although host is case-insensitive, producers and normalizers should use lowercase for registered names and hexadecimal addresses for the sake of uniformity, while only using uppercase letters for percent-encodings.

这里发生的事情是 JSDOM 正在规范化主机名,并在这样做的过程中将其变为小写。 (顺便说一句,在 Chrome 中输入相同的 URI,你会看到 Chrome 也一样。)

如果你的 URI 没有主机名,那么你需要这样写:

file:///testResource/test.js

请注意 testResource 之前的附加斜线。此 URI 的主机名为空。当主机名为空时,localhost 是理解的主机。