Учитывая, что я загружаю скрипт, как это:
<script nonce="35609alksdgx30q" src="example.com/main.js"></script>
А внутри main.js
Мне нужно взять одноразовый номер на теге script:
const currentScriptElement = document.currentScript
const nonce = currentScriptElement.getAttribute('nonce')
Если console.log(nonce)
, я получаю два разных значения:
- В Firefox (последняя версия) я получаю:
35609alksdgx30q
, как и ожидалось.
- В Chrome (последний) я получаю:
""
(пустая строка), чего я не ожидаю.
Если я получаю одноразовый номер, используя экспериментальное свойство nonce ( HTMLElement.nonce ), я получу следующие значения:
- В Firefox (последняя версия) я получаю:
null
как и ожидалось (поскольку свойство nonce не поддерживается Firefox)
- В Chrome (последний) я получаю:
35609alksdgx30q
, как и ожидалось.
Итак, чтобы надежно получить одноразовый номер, я должен сделать что-то вроде этого:
const nonce = currentScript.nonce || currentScript.getAttribute('nonce') || false
У меня вопрос: , почему getAttribute('nonce')
последовательно не возвращает значение nonce? Я подозреваю, что это вопрос безопасности, но тогда почему Firefox также не возвращает пустую строку при использовании getAttribute('nonce')
Да, я знаю, технически nonce
используется для встроенных сценариев, и да, этот сценарий очищается политикой CSP сайта. Я должен схватить nonce
таким образом, потому что некоторые вещи были реализованы xD