Пользовательские сценарии Chrome отделены от глобального пространства имен, как сценарии Greasemonkey?
Я знаю, что скрипты Greasemonkey автоматически оборачиваются в анонимные функции, которые каким-то образом изолированы, чтобы предотвратить конфликт со скриптами на странице.
То же самое происходит с пользовательскими скриптами Chrome?
1 ответ
Да, сценарии Greasemonkey обычно заключаются в анонимную функцию. И пользовательские скрипты Chrome, очевидно, тоже.
Но, что более важно, сценарии Greasemonkey обычно 1 заключены в изолированную программную среду XPCNativeWrapper, в то время как Google Chrome преобразует пользовательские скрипты в расширения и работает в области, которую Google называет "изолированным миром" 2.
Таким образом, вам не нужно оборачивать код вашего скрипта в анонимные функции в целях безопасности, они уже защищены.
Просто будьте осторожны, что:
- Если вы вводите код прямо на страницу (создайте
<script>
тег), то этот код можно увидеть с помощью JS страницы. - Если вы используете
unsafeWindow
тогда страница теоретически могла бы следовать за ней и получить слегка повышенные привилегии.
Риск очень низкий, и я не смог найти никаких задокументированных подвигов в дикой природе.
~~~
В итоге, скрипты в разной степени изолированы в обоих браузерах. (И не просто за счет того, что его оборачивают анонимными функциями.)
Greasemonkey имеет хороший набор доступных функций в Firefox. Хотя пользовательские скрипты в Chrome намного более ограничены.
Тем не менее, большая часть функциональности GM восстанавливается в Chrome с помощью расширения Tampermonkey.
1 Начиная с версии 1.0 Greasemonkey (24 августа 2012 г.), песочница управляется @grant
директива Если скрипт выполняется с (или по умолчанию) @grant none
тогда песочница не используется. Скрипт просто работает в закрытой области видимости GM_
, API-функции не будут работать.
2 Разве это не звучит намного больше / приятнее, чем какая-нибудь грязная песочница? (^_^)
,