javascript - recorrer - Obtenga todas las propiedades de ventana definidas por el usuario?
recorrer array de objetos javascript (4)
¿Hay alguna forma de averiguar todas las propiedades y variables de la ventana definidas por el usuario (variables globales) en javascript?
Intenté console.log(window)
pero la lista es interminable.
¿Tal vez esto?:
for (var property in window)
{
if (window.hasOwnProperty(property))
console.log(property)
}
Esto tiene el mismo espíritu que la respuesta de @jungy, pero podemos hacerlo en 3 líneas:
document.body.appendChild(document.createElement(''div'')).innerHTML=''<iframe id="temoin" style="display:none"></iframe>'';
for (a in window) if (!(a in window.frames[window.frames.length-1])) console.log(a, window[a])
document.body.removeChild($$(''#temoin'')[0].parentNode);
Primero agregamos un iframe oculto; luego probamos variables existentes contra la API estándar de JavaScript en el iframe; luego eliminamos el iframe
Para trabajar de manera más conveniente, podría ser útil ordenar los resultados en orden cronológico, y aún es posible en una versión de 3 líneas:
document.body.appendChild(document.createElement(''div'')).innerHTML=''<iframe id="temoin" style="display:none"></iframe>'';
Object.keys(window).filter(a => !(a in window.frames[window.frames.length-1])).sort().forEach((a,i) => console.log(i, a, window[a]));
document.body.removeChild($$(''#temoin'')[0].parentNode);
Y puede ser empacado en un marcador:
javascript:document.body.appendChild(document.createElement(''div'')).innerHTML=''<iframe%20id="temoin"%20style="display:none"></iframe>'';Object.keys(window).filter(a=>!(a%20in%20window.frames[window.frames.length-1])).sort().forEach((a,i)=>console.log(i,a,window[a]));document.body.removeChild(document.querySelectorAll(''#temoin'')[0].parentNode);throw ''done'';
Necesitarías hacer el trabajo por ti mismo. Lea en todas las propiedades, en el primer momento posible que pueda. A partir de ese momento, puede comparar la lista de propiedades con la estática.
var globalProps = [ ];
function readGlobalProps() {
globalProps = Object.getOwnPropertyNames( window );
}
function findNewEntries() {
var currentPropList = Object.getOwnPropertyNames( window );
return currentPropList.filter( findDuplicate );
function findDuplicate( propName ) {
return globalProps.indexOf( propName ) === -1;
}
}
Así que ahora, podríamos ir como
// on init
readGlobalProps(); // store current properties on global object
y después
window.foobar = 42;
findNewEntries(); // returns an array of new properties, in this case [''foobar'']
Por supuesto, la advertencia aquí es que solo puede "congelar" la lista de propiedades globales en el momento en que su script pueda llamarlo en el momento más temprano.
También puede comparar la ventana con una versión limpia de la ventana en lugar de intentar hacer una instantánea durante el tiempo de ejecución para comparar. Ejecuté esto en la consola, pero podrías convertirlo en una función.
// make sure it doesn''t count my own properties
(function () {
var results, currentWindow,
// create an iframe and append to body to load a clean window object
iframe = document.createElement(''iframe'');
iframe.style.display = ''none'';
document.body.appendChild(iframe);
// get the current list of properties on window
currentWindow = Object.getOwnPropertyNames(window);
// filter the list against the properties that exist in the clean window
results = currentWindow.filter(function(prop) {
return !iframe.contentWindow.hasOwnProperty(prop);
});
// log an array of properties that are different
console.log(results);
document.body.removeChild(iframe);
}());