Это не работает, потому что Chrome запрещает любой тип встроенного кода в расширениях через политику безопасности контента.
Встроенный JavaScript не будет выполняться. Это ограничение запрещает как встроенные блоки
blockquote>, так и встроенные обработчики событий (например,
).
Как обнаружить
Если это действительно проблема, Chrome выполните следующую ошибку в консоли:
Отказано в выполнении встроенного скрипта, поскольку оно нарушает следующую директиву политики безопасности контента: «script-src» self 'chrome-extension-resource: ». Для включения встроенного выполнения требуется либо ключевое слово «небезопасное-встроенное», либо хэш («sha256 -...»), либо nonce («nonce -...»).
blockquote>Чтобы получить доступ к консоли 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. В частности, установка политики скрипта, которая включает в себя
blockquote>'unsafe-inline'
, не будет иметь никакого эффекта.Обновление: с Chrome 46 можно настроить белый список определенных встроенных блоков кода:
Начиная с Chrome 46 встроенные скрипты могут быть включены в белый список, указывая хэш-код, основанный на base64 исходного кода в политике. Этот хеш должен быть префикс используемого хэш-алгоритма (sha256, sha384 или sha512). См. Использование хэша для
blockquote>элементов для примера.
Однако я не вижу причины использовать это и не включит встроенные атрибуты как
onclick="code"
.
Вы не можете перейти к Observable
. Вы должны подписаться на него, чтобы восстановить массив из TodoService
. Попробуйте что-то вроде этого:
public $todos :TodoService[];
// ..
public getGlobalData() {
this.getToDoData().subscribe(result => this.$todos = result);
}
Или вы можете напрямую преобразовать Observable
в массив, используя async
в вашем HTML:
<app-editform [toDo$]="todo" *ngFor="let todo of (cs.$todos | async)"></app-editform>
Как говорит твоя ошибка. Angular поддерживает только перебор массивов.
Я думаю, что вам не хватает | async
для преобразования вашей наблюдаемой обратно в массив.
<app-editform [toDo$]="todo" *ngFor="let todo of cs.$todos | async"></app-editform>