Как избежать вызова JQuery globalEval при использовании AngularJS в упакованных приложениях Chrome?

Я создаю упакованное приложение Chrome, где, согласно CSP, мне не разрешено использовать метод eval(). Теперь, поскольку я использую JQuery (версия 1.10.2) и AngularJS (версия 1.0.6), один из методов библиотеки вызывает JQuery globalEval внутри. (globalEval вызывает внутри себя eval, что нельзя использовать в этом контексте)

Кто-нибудь сталкивался с такой же проблемой? Любое обходное решение, кроме реинжиниринга метода библиотеки JQuery/AngularJS?


person D.S    schedule 03.10.2013    source источник
comment
У меня была похожая беда. Когда я попытался простым способом добавить AngularJs 1.2.0-rc.2 в свое упакованное приложение, я получил ошибки в строках 8789 и 7861 (неминифицированной версии). Ошибки были обеими: Отказано в оценке строки как JavaScript, потому что «unsafe-eval» не является разрешенным источником сценария в следующей директиве политики безопасности контента: default-src 'self' chrome-extension-resource:. Обратите внимание, что «script-src» не был задан явно, поэтому «default-src» используется как запасной вариант. Все документы Google говорят, что AngularJs в порядке, но, по-видимому, это не так.   -  person David Grayson    schedule 09.10.2013
comment
Дважды проверьте, есть ли у вас встроенный код javascript. Хотя в библиотеке AngularJS есть некоторые внутренние вызовы eval, но мне наконец удалось обойти это. Я обнаружил, что у меня есть встроенный код jquery, который каким-то образом вызывал проблему, вызывая некоторые методы AngularJS, которые, в свою очередь, вызывают Eval.   -  person D.S    schedule 09.10.2013


Ответы (1)


И angular, и jquery без проблем работают с CSP. Но для этого angular нужна дополнительная настройка: ngCsp

Короче говоря, вам нужно будет добавить директиву ng-csp к тегу <html>. Это сообщит angular, что CSP включен, и он не будет пытаться делать то, что запрещено CSP.

person jusio    schedule 10.10.2013