Как мне заблокировать функцию javascript в локальной области? Я хочу запретить ей использовать глобальные переменные

#javascript #function #scope #global-variables #global

#javascript #функция #область видимости #global-variables #глобальный

Вопрос:

Есть ли способ запретить функции использовать глобальные переменные, такие как document , window , navigator и другие объявленные глобальные функции?

ПРАВКА1: И если бы я мог выбирать, какие глобальные объекты ограничены, это было бы здорово, потому что я хотел бы разрешить функции использовать, например, математический объект и его функции…

Комментарии:

1. кто вызывает функцию? Я понял вопрос, но не сценарий!

2. Любой может определить функцию (отправить ее через строку), и я вызову eval(fn); fn(something) где fn — это функция, определенная незнакомцем… Я хочу сделать это безопасным (если возможно).

3. передайте ее в цикле в виде строк и верните чистую часть (со всеми необходимыми функциями). Для создания шаблона потребуются некоторые усилия, но это возможно.

Ответ №1:

Есть ли способ запретить функции использовать глобальные переменные, такие как document, window, navigator и другие объявленные глобальные функции?

Нет, если только…

Единственный способ, которым эта задача возможна, — это если можно изменить лексическую область видимости функций, то есть изменить исходный код каким-либо образом, например, обернуть его, как показано ниже.

Представьте:

 ;(function () {
    var window = "Hello"

    // original content
    function foo () {
        alert(window)
    }
    foo()

})()
  

Этот подход часто используется в библиотеках для создания частных пространств имен, но в этих случаях исходный код также доступен и разработан с учетом этого. Я document раньше использовал это с, чтобы изменить локальную версию jQuery.

Хотя with на первый взгляд это может показаться многообещающим, важно понимать, что это также всего лишь лексическая конструкция, которая не вводит динамические переменные.

Удачного кодирования.

Ответ №2:

Вы могли бы попросить своих пользователей ограничить себя ADsafe кодом. С веб-сайта:

ADsafe позволяет безопасно размещать гостевой код (например, стороннюю рекламу по сценарию или виджеты) на веб-странице. ADsafe определяет подмножество JavaScript, которое является достаточно мощным, чтобы позволить гостевому коду выполнять ценные взаимодействия, в то же время предотвращая вредоносное или случайное повреждение или вторжение. Подмножество ADsafe может быть проверено механически с помощью таких инструментов, как JSLint, так что для проверки гостевого кода на безопасность не требуется проверка человеком. Подмножество ADsafe также обеспечивает соблюдение надлежащих методов кодирования, увеличивая вероятность того, что гостевой код будет выполняться правильно.

Если вы установите флажок справа, JSLint проверит, что код совместим с ADsafe и, следовательно, безопасен для выполнения на вашем сайте.