Подтвердить что ты не робот

Список всех глобальных переменных js, используемых сайтом (не все определены!)

Каков способ перечислить все глобальные переменные, которые были использованы сайтом? Может ли любой отладчик javascript браузера сделать это? При использовании я имею в виду READ, не измененный/добавленный. Обнаруживать iframe, было бы неплохо.

ОБРАТИТЕ ВНИМАНИЕ: Мне нужно получить список глобальных переменных, "затронутых" сайтом. Не все из них или добавленные или отредактированные, те, которые использовались в любом месте сценариев сайта.

4b9b3361

Ответ 1

В Chrome перейдите к инструментам Dev и откройте консоль. Затем введите следующее:

Object.keys( window );

Это даст вам массив всех глобальных переменных.

ИЗМЕНИТЬ

После поиска в Google немного, я нашел способ. Вам понадобится firefox и jslinter.

После настройки откройте jslinter и перейдите в Параметры- > проверить все в левом столбце , кроме "допустимых неиспользуемых параметров" .

Затем запустите jslinter на веб-странице и прокрутите вниз результаты. У вас будет список неиспользуемых переменных (глобальный, а затем локальный для каждой функции).

Теперь запустите Object.keys(window); в консоли и сравните результаты обоих, чтобы выяснить, какие из них используются.

Ответ 2

Поскольку этот вопрос является первым в google при поиске способа отображения глобальных переменных javascript, я добавлю для этого свой собственный ответ. Иногда вам нужно перечислить глобальные переменные, чтобы увидеть, нет ли в вашем коде переменной, пропущенной вне области видимости (определяется без "var" ). Для этого используйте это в консоли отладки:

(function ()
{
   var keys=Object.keys( window );
   for (var i in keys)
   {
      if (typeof window[keys[i]] != 'function')
      console.log(keys[i], window[keys[i]]);
   }
})();

Он отобразит стандартные глобальные переменные, такие как окно, документ, местоположение и т.д. Это всего лишь несколько. Таким образом, вы можете легко найти свои пропущенные вары в списке.

Ответ 3

Вы можете попытаться использовать геттеры для этого, которые вы создаете для всех существующих глобальных переменных. Запустите это до начала страницы:

Object.keys(window) // or
Object.getOwnPropertyNames(window).concat(
  Object.getOwnPropertyNames(Object.getPrototypeOf(window))
) // or whatever
.forEach(function(name) {
    var d = Object.getOwnPropertyDescriptor(window, name),
        def = Object.defineProperty,
        log = console.log.bind(console);
    if (d && !d.configurable)
        return log("cannot detect accessing of "+name);
    def(window, name, {
        configurable: true,
        get: function() {
            log("window."+name+" was used by this page!");
            if (d) {
                def(window, name, d);
                return d.get ? d.get() : d.value;
            } else { // it was not an own property
                delete window[name];
                return window[name];
            }
        },
        set: function(x) {
            log("Ugh, they're overwriting window."+name+"! Something gonna crash.");
        }
    });
});

Конечно, дескрипторы свойств и т.д. несовместимы со старыми браузерами. И обратите внимание, что существуют некоторые глобальные переменные / window свойства, которые не могут быть программно перечислимыми (например, обработчики on*), если они вам понадобятся, вам придется явно их перечислять в массиве. См. Связанные вопросы Список всех свойств объекта window? и Cross Browser Valid JavaScript Names для этого.

Тем не менее, я думаю, что использование инструмента покрытия кода, который представляет собой неподтвержденные глобальные переменные, например, предложенный @stackErro, более полезен.

Ответ 4

скопируйте и вставьте следующий код в консоль javascript.

var keys = Object.getOwnPropertyNames( window ),
    value;

for( var i = 0; i < keys.length; ++i ) {
    value = window[ keys[ i ] ];
    console.log( value );
}

все кредиты RightSaidFred (Javascript - сброс всех глобальных переменных)

Я надеюсь, что это помогло вам

Ответ 5

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

var WINDOW_PROPS = Object.keys(window);

Тогда в тот момент, когда вам нужно открыть свои глобальные переменные, просто выполните примерно так:

var GLOBALS = Object.keys(window)
    // filter the props which your code did not declare
    .filter(prop => WINDOW_PROPS.indexOf(prop) < 0)
    // prettify output a bit :) It up to you...
    .map(prop => `${typeof window[prop]} ${prop} ${window[prop]}`)
    // sort by types and names to find easier what you need
    .sort();

console.log(GLOBALS.join("\n"));

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

Ответ 6

Вы можете попробовать использовать JetBrains PhpStorm, что я делаю, вы можете получить пробную версию на 30 дней бесплатно для любой системы. Затем вы проверяете JSLint или JSHint или оба я не могу вспомнить, а затем все неиспользуемые переменные подчеркнуты, выделены разным цветом (в соответствии с темой) и видны на полосе прокрутки, и когда вы наводите на них курсор, он говорит о неиспользуемой переменной;

EDIT: Я думаю, что теперь версия сообщества бесплатна.