Почему jsdom устанавливает для моего атрибута * values ​​* все строчные буквы? - PullRequest
0 голосов
/ 30 января 2019

вот пример кода.работает в веб-шторме."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

Обратите внимание на изменение регистра в слове Resource.Я понимаю, что имена атрибутов не чувствительны к регистру, но значения должны быть, нет?

1 Ответ

0 голосов
/ 30 января 2019

То, как записывается ваш URI, часть testResource является именем хоста.Имена хостов нечувствительны к регистру и Общий синтаксис URI (RFC3986) состояния:

Хотя хост не учитывает регистр, производители и нормализаторы должны использовать строчные буквы для зарегистрированных имен и шестнадцатеричные адреса дляради единообразия, используя только заглавные буквы для процентного кодирования.

Здесь происходит то, что JSDOM нормализует имя хоста и делает его строчным.(Кстати, введите тот же URI в Chrome, и вы увидите, что Chrome делает то же самое.)

Если в вашем URI не было имени хоста, вам нужно написать его так:

file:///testResource/test.js

Обратите внимание на дополнительную косую черту перед testResource.Этот URI имеет пустое имя хоста.Когда имя хоста пусто, localhost является понятным хостом.

...