Пользовательские сценарии Chrome отделены от глобального пространства имен, как сценарии Greasemonkey? - PullRequest
5 голосов
/ 08 июля 2011

Я знаю, что скрипты Greasemonkey автоматически оборачиваются в анонимные функции в некотором роде изолированы, чтобы предотвратить их конфликт со скриптами на странице.

То же самое происходит с пользовательскими скриптами Chrome?

1 Ответ

7 голосов
/ 12 июля 2011

Да, сценарии Greasemonkey обычно заключены в анонимную функцию . И, пользовательские скрипты Chrome, очевидно, слишком .

Но, что более важно, сценарии Greasemonkey обычно 1 заключены в песочницу XPCNativeWrapper , в то время как Google Chrome преобразует пользовательские скрипты в расширения, и они работать на арене, которую Google называет «изолированным миром» 2 .

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

Просто будьте осторожны, что:

  1. Если вы внедрите код непосредственно в страницу (создайте тег <script>), то этот код будет виден JS страницы.
  2. Если вы используете unsafeWindow, то страница теоретически может последовать за ней и получить слегка повышенные привилегии.

Риск очень низкий, и я не смог найти никаких задокументированных подвигов в дикой природе.

~~~
В итоге, скрипты в разной степени изолированы в обоих браузерах. (И не только потому, что он обернут в анонимные функции.)

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

Однако большая часть функциональности GM восстановлена ​​в Chrome с помощью расширения Tampermonkey .




1 Начиная с Greasemonkey версии 1.0 (24 августа 2012 г.), песочница управляется директивой @grant . Если скрипт выполняется с (или по умолчанию) @grant none, то песочница не используется. Сценарий просто выполняется в закрытой области видимости, и обычные GM_ функции API не будут работать.

2 Разве это не звучит намного больше / приятнее, чем какая-нибудь грязная песочница? (^ _ ^)

.

...