Какой браузер вы используете?
Существуют некоторые поведенческие различия между Chrome & Firefox. Например:
В Chrome, eval()
всегда запускает код в контексте скрипта содержимого, а не в контексте страницы.
В Firefox:
- Если вы вызываете
eval()
, он запускает код в контексте скрипта содержимого. - Если вы вызываете
window.eval()
, он запускает код в контекст страницы.
source: Использование eval () в скриптах содержимого
var
является глобальным в своей области.
Сценарии содержимого выполняются в собственной области видимости. В противном случае скрипт страницы может запускать функции в скрипте контента и, следовательно, в браузере и создавать дыру в безопасности.
AFAIK Песочница GreaseMonkey / ViolentMonkey / TamperMonkey для каждого пользовательского скрипта, в то время как FireMonkey (только Firefox) использует специальный API-интерфейс пользователя, который создает безопасную область для каждого пользовательского скрипта.
Следовательно, var testVar = 123;
виден только в области содержимого сценария.
window
объект - это общий объект, который содержит как область пользователя, так и область страницы.
Например:
var testVar = 123;
console.log(testVar); // logs "123"
console.log(window.testVar); // logs "undefined"
window.testVar = 456;
console.log(testVar); // logs "123"
console.log(window.testVar); // logs "456"
Примечание: протестировано с FireMonkey
, пытающимся получить переменную, определенную в глобальном контексте (обычно в окне)
Для получения переменной, определенной в контексте страницы (в отличие от ее установки), есть несколько опций, которые зависят от ситуации:
@ require
@require
также необходимо ввести в ame context / scope как пользовательский сценарий, который ему требуется, то есть область содержимого, выполняемая менеджерами сценариев.
Чтобы ответить более точно, необходимо увидеть действительный код.