Пользовательские сценарии Chrome отделены от глобального пространства имен, как сценарии Greasemonkey?

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

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

1 ответ

Решение

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

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

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

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

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

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

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

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

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




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

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

,

Другие вопросы по тегам