Список всех глобальных переменных js, используемых сайтом (не все определены!)
Каков способ перечислить все глобальные переменные, которые были использованы сайтом? Может ли любой отладчик javascript браузера сделать это? При использовании я имею в виду READ, не измененный/добавленный. Обнаруживать iframe, было бы неплохо.
ОБРАТИТЕ ВНИМАНИЕ:
Мне нужно получить список глобальных переменных, "затронутых" сайтом. Не все из них или добавленные или отредактированные, те, которые использовались в любом месте сценариев сайта.
Ответы
Ответ 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:
Я думаю, что теперь версия сообщества бесплатна.