Это не работает, потому что Chrome запрещает любой тип встроенного кода в расширениях через политику безопасности контента.
Встроенный JavaScript не будет выполняться. Это ограничение запрещает как встроенные блоки
, так и встроенные обработчики событий (например,
).
Как обнаружить
Если это действительно проблема, Chrome выполните следующую ошибку в консоли:
Отказано в выполнении встроенного скрипта, поскольку оно нарушает следующую директиву политики безопасности контента: «script-src» self 'chrome-extension-resource: ». Для включения встроенного выполнения требуется либо ключевое слово «небезопасное-встроенное», либо хэш («sha256 -...»), либо nonce («nonce -...»).
Чтобы получить доступ к консоли JavaScript для всплывающих окон (что полезно для отладки в целом), щелкните правой кнопкой мыши кнопку вашего внутреннего абонента и выберите «Осмотреть всплывающее окно» в контекстном меню.
Доступна дополнительная информация об отладке всплывающего окна здесь .
Как исправить
Нужно удалить все встроенные JavaScript. Существует руководство в документации Chrome .
Предположим, что оригинал выглядит так:
Click this
Нужно удалить атрибут
onclick
и дать элемент уникальный id:Click this
И затем присоедините слушателя из скрипта (который должен находиться в файле
.js
, предположимpopup.js
):// Pure JS: document.addEventListener('DOMContentLoaded', function() { document.getElementById("click-this").addEventListener("click", handler); }); // The handler also must go in a .js file function handler() { /* ... */ }
Обратите внимание на обертку в событии
DOMContentLoaded
. Это гарантирует, что элемент существует во время выполнения. Теперь добавьте тег скрипта, например, вдокумента:
Альтернатива, если вы используете jQuery:
// jQuery $(document).ready(function() { $("#click-this").click(handler); });
Расслабляющая политика
В: Ошибка указывает способы разрешить встроенный код. Я не хочу / не могу изменить свой код, как включить встроенные скрипты?
A: Несмотря на то, что говорит ошибка, вы не можете включить встроенный скрипт :
Нет механизма ослабления ограничения на выполнение встроенного JavaScript. В частности, установка политики скрипта, которая включает в себя
'unsafe-inline'
, не будет иметь никакого эффекта.Обновление: с Chrome 46 можно настроить белый список определенных встроенных блоков кода:
Начиная с Chrome 46 встроенные скрипты могут быть включены в белый список, указывая хэш-код, основанный на base64 исходного кода в политике. Этот хеш должен быть префикс используемого хэш-алгоритма (sha256, sha384 или sha512). См. Использование хэша для
элементов для примера.
Однако я не вижу причины использовать это и не включит встроенные атрибуты как
onclick="code"
.