Сайт қолданатын барлық js айнымалыларының тізімін (барлық анықталған жоқ!)

Сайт қолданған барлық жаһандық айнымалыларды тізімдеудің қандай жолы бар? Кез-келген браузерлер JavaScript отладчикы мұны істей ме? Пайдаланылғанда, READ/NOT/өзгертілген емес дегенді білдіреді. Iframe-ді табу, жақсы болар еді.

ЕСКЕРТУ: Маған сайт айналымының «айналдырылған» ғаламдық айнымалы тізімдерін алу керек. Олардың бәрі де, қосылмағандар да, редакцияланғандар да бар, олар сайттың сценарийлерінде қолданылған.

41
@ C5H8NNaO4 Рахмет. Бұл идея болуы мүмкін, оны тексеру керек. Демалыс күндері кейбір бос уақытыңыз болуы мүмкін.
қосылды автор Flash Thunder, көзі
Біреудің жасаған өзгерістерін қайтаруға тура келді, себебі ол мәселені өзгертті. Түрлендірілген дегенді білдірмейді. Бұл сайттың кез келген жерінде қолданылғанын білдіреді. Пайдалану = оқу немесе жазу.
қосылды автор Flash Thunder, көзі
Дубликат емес ...; Кодты талдау 100% сенімді емес, өте нашар болуы мүмкін.
қосылды автор Flash Thunder, көзі
«Іздеу» интерактивтік жолы devtools (мысалы, chrome) терезесін ашып, window + Enter енгізіп, содан кейін объектілік ағашты кеңейту үшін үшбұрышты нұқыңыз.
қосылды автор ccpizza, көзі
@Alnitak: О ... мм. Сонда, кодты жабу тесті сияқты ғаламдық айнымалыларға ерекше назар аудару қажет болуы мүмкін.
қосылды автор Felix Kling, көзі
@FelixKling құрылды емес қолданылған
қосылды автор Alnitak, көзі
қосылды автор C5H8NNaO4, көзі
@DanDascalescu Сізге кешірім сұраймын, сіз дұрыс деп таптыңыз.
қосылды автор C5H8NNaO4, көзі
@FlashThunder Бұл менің жаман болды. Кешірім үшін кешірім сұраймын, өзгерістерді қайтару үшін рахмет :)
қосылды автор C5H8NNaO4, көзі
@DanDascalescu Бұл дәл қайталану емес. Бүкіл ғаламдық мүшелерді қалай алуға болатындығы туралы жауап алынғаннан кейін, бетпен анықталған/өзгертілген барлық ғаламдық мүшелерге қарағанда, біршама өзгеше, өйткені соңғы бірнеше қосымша қадамдар қажет.
қосылды автор C5H8NNaO4, көзі
@ C5H8NNaO4: ОР-дың «READ, өзгертілген өзгертілмеген» деген сөзі бар.
қосылды автор Dan Dascalescu, көзі

7 жауаптар

Chrome ішінде Dev құралдарына өтіп, консольді ашыңыз. Содан кейін келесіні теріңіз:

Object.keys( window );

Бұл барлық жаһандық айнымалылардың массивін береді.

ӨҢДЕУ

Google-ді іздегеннен кейін, мен жолды таптым. firefox және jslinter addon.

Once setup, open jslinter and go to Options->check everything on the left column except "tolerate unused parameters".

Содан кейін веб-бетте jslinter іске қосыңыз және нәтиже бойынша төмен қарай жылжыңыз. Сізде пайдаланылмаған айнымалылардың тізімі болады (жаһандық және әрбір функция үшін жергілікті).

Енді консольде Object.keys (терезе) іске қосыңыз және екеуінің де нәтижелерін салыстыру үшін олардың қайсысы қолданылатындығын анықтаңыз.

65
қосылды
@DanDascalescu, бірақ пайдаланылатын/оқылатын айнымалы мәндерді қалайды, object.keys (терезе) пайдаланылмаған/оқылмаған тізімін көрсетеді.
қосылды автор stackErr, көзі
@FlashThunder өңделді
қосылды автор stackErr, көзі
Бұл менің сұрағыма жауап емес. Бұл барлық жаһандық айнымалы тізімдерді тізімдейді және мен тек сайттың біреуін ғана тізімдегім келеді.
қосылды автор Flash Thunder, көзі
@FlashThunder: иә, сіз қосымша 6 қасиетке ие боласыз, олар сіз сүзгілей аласыз: «жоғарғы», «терезе», «орын», «сыртқы», «хром», «құжат». Осы беттегі консольде Object.keys (терезе) жұмыс істеп көріңіз.
қосылды автор Dan Dascalescu, көзі

Сіз бар барлық жаһандық айнымалы мәндер үшін жасайтын алушылар үшін пайдалануға тырысуға болады. Бетті бастау алдында оны іске қосыңыз:

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's gonna crash.");
        }
    });
});

Әрине меншік дескрипторлары және т.б. ескі браузерлермен үйлесімді емес. Сондай-ақ бағдарламалауға жатпайтын (мысалы, on * өңдегіштері сияқты) болуы мүмкін кейбір жаһандық айнымалылар/ window сипаттарына назар аударыңыз, қажет болса, оларды нақты тізімге енгізу керек массив. Терезе нысанының барлық қасиеттерін келтіріңіз? және Cross Browser үшін жарамды JavaScript аттары .

Дегенмен, @stackErro сияқты ұсынылмаған жаһандық айнымалы мәндер туралы айтатын кодты қамту құралын іске қосу пайдалы деп ойлаймын.

7
қосылды

Бұл мәселе JavaScript javascript айнымалы мәндерін тізімдеу жолын іздегенде google-де бірінші болғандықтан, мен бұл үшін өзімнің жауапты қосамын. Кейде сізде кодтың ауқымнан тыс («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]]);
   }
})();

Ол стандартты жаһандық айнымалы тізімдерді, мысалы, терезе, құжат, орналасу және т.б. тізімдейді. Олар аз ғана. Осылайша сіз тізімдегі ашылған әдетті оңай таба аласыз.

6
қосылды
Бұл әлі де менің сұрағыма жауап жоқ ... оқи оқиғаны туралы оқиғаны жазу туралы сұрадым ... Мен қолданатын барлық айнымалы мәндерді тізімдеуім керек. .. Мысалы, егер сайт windows.navigator.userAgent сөзін оқыған болса.
қосылды автор Flash Thunder, көзі

Мен не істедім. Мен кішкене JavaScript/Frameworks бар бетті таптым, барлық кілттерді массивке тіркедім. Содан кейін жаңа беттегі барлық кілттерді қайталап, алдыңғы сайтқа кірмегендер ғана тіркелді. Сіз оны көріңіз немесе менің код үзіндісін қолдануға болады

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var ks = ["postMessage","blur","focus","close","frames","self","window","parent","opener","top","length","closed","location","document","origin","name","history","locationbar","menubar","personalbar","scrollbars","statusbar","toolbar","status","frameElement","navigator","customElements","external","screen","innerWidth","innerHeight","scrollX","pageXOffset","scrollY","pageYOffset","screenX","screenY","outerWidth","outerHeight","devicePixelRatio","clientInformation","screenLeft","screenTop","defaultStatus","defaultstatus","styleMedia","onanimationend","onanimationiteration","onanimationstart","onsearch","ontransitionend","onwebkitanimationend","onwebkitanimationiteration","onwebkitanimationstart","onwebkittransitionend","isSecureContext","onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onresize","onscroll","onseeked","onseeking","onselect","onstalled","onsubmit","onsuspend","ontimeupdate","ontoggle","onvolumechange","onwaiting","onwheel","onauxclick","ongotpointercapture","onlostpointercapture","onpointerdown","onpointermove","onpointerup","onpointercancel","onpointerover","onpointerout","onpointerenter","onpointerleave","onafterprint","onbeforeprint","onbeforeunload","onhashchange","onlanguagechange","onmessage","onmessageerror","onoffline","ononline","onpagehide","onpageshow","onpopstate","onrejectionhandled","onstorage","onunhandledrejection","onunload","performance","stop","open","alert","confirm","prompt","print","requestAnimationFrame","cancelAnimationFrame","requestIdleCallback","cancelIdleCallback","captureEvents","releaseEvents","getComputedStyle","matchMedia","moveTo","moveBy","resizeTo","resizeBy","getSelection","find","webkitRequestAnimationFrame","webkitCancelAnimationFrame","fetch","btoa","atob","setTimeout","clearTimeout","setInterval","clearInterval","createImageBitmap","scroll","scrollTo","scrollBy","onappinstalled","onbeforeinstallprompt","crypto","ondevicemotion","ondeviceorientation","ondeviceorientationabsolute","indexedDB","webkitStorageInfo","sessionStorage","localStorage","chrome","visualViewport","speechSynthesis","webkitRequestFileSystem","webkitResolveLocalFileSystemURL","addEventListener", "removeEventListener", "openDatabase", "dispatchEvent"]
var newKs = []
for (key in window) {
    if(ks.indexOf(key) == -1 && key !== "ks" && key !=="newKs") {
        newKs.push(key);
    }
}
console.log(newKs);
</div> </div>
3
қосылды

Сіздің глобаллеріңізді тізімдеудің оңай жолы мен кейде пайдаланамын. Алдымен бұл сценарийлердің орындалуына дейін бұл кодты мүмкіндігінше тезірек қойыңыз.

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's 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 мүмкіндіктерін қолдандым. Өндіріс үшін әлі де жақсы емес, бірақ отладкаға қарсы мақсаттар үшін жеткілікті және заманауи браузерлерде жұмыс істеу керек.

1
қосылды

келесі кодты JavaScript консоліне көшіріп, қойыңыз

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

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

RightSaidFred барлық несиелері ( Javascript - барлық жаһандық айнымалыларды демонстрациялау )

Сізге көмектесті деп үміттенемін

1
қосылды
Бұл менің сұрағыма жауап емес.
қосылды автор Flash Thunder, көзі
Сіздің жауабыңыз керемет, бірақ жақсы оқу үшін console.info қосамын
қосылды автор AmerllicA, көзі
gooodd, бұл көмек!
қосылды автор Diogo Cid, көзі

JetBrains PhpStorm-ды пайдаланып көріңіз, бұл менің жасағаным, сіз кез-келген жүйе үшін тегін 30 күн сынақ аласыз. Содан кейін сіз JSLint немесе JSHint-ті тексере аласыз немесе екеуін де есіме түсірмейсіз, содан кейін пайдаланылмаған барлық айнымалы мәндер әртүрлі түспен (тақырып бойынша) және жылжыту жолағында көрінетін және пайдаланылмаған айнымалы дейді;

EDIT: Менің ойымша, қоғамдастық нұсқасы қазір тегін.

0
қосылды
Мен дұрыс @DanDascalescu деп ойлаймын, бірақ мен бұл айнымалылардың қалай пайдаланылатынын тексерудің жалғыз жолы деп ойлаймын. сондықтан мен бұл жауапты жоймаймын.
қосылды автор Prozi, көзі
Мен шынымен терезе парағына қосылғанды ​​қазудан гөрі пайдалы деп ойлаймын. Сізге ешқашан қолданылмаған нәрсені дәлелдейтін құрал бар, жақсы, маған біраз жақсырақ көрінеді.
қосылды автор Korcholis, көзі
ОП, ғаламдық ауыспалылар туралы браузер консолі арқылы қол жетімді, бірақ WebStorm жасайтын бастапқы кодты талдау арқылы сұрады.
қосылды автор Dan Dascalescu, көзі