¿Cuál es el punto de document.defaultView
?¿Cuál es el punto de document.defaultView?
En los navegadores devuelve el objeto ventana asociada con el documento o null si no hay ninguna disponible. Código
como el uso siguiente (de PPK's site) hace de document.defaultView
:
function getStyle(el,styleProp)
{
var x = document.getElementById(el);
if (x.currentStyle)
var y = x.currentStyle[styleProp];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
return y;
}
código como este se puede encontrar en otros lugares, como David Mark Mi biblioteca. No estoy seguro de si la gente está copiando de PPK o de alguna otra fuente o si se trata de esto de forma independiente, pero no lo entiendo.
Mi pregunta es, ¿cuál es el punto de usar document.defaultView
en casos como este? ¿No sería más fácil de escribir de la siguiente manera:
function getStyle(element, styleProp) {
if (element === ''+element) element = document.getElementById(element);
return element.currentStyle ? element.currentStyle[styleProp] :
getComputedStyle(x,null).getPropertyValue(styleProp);
}
¿Qué hace que document.defaultView.getComputedStyle
window.getComputedStyle
o simplemente getComputedStyle
no?
La respuesta de cwolves me hizo pensar en la dirección correcta. La función original es tonta, falta el punto de defaultView
. Mi propuesta anterior es menos tonta, pero también me falta el punto de defaultView
. Aquí está mi nueva propuesta:
function getStyle(element, styleProp) {
var view = element.ownerDocument && element.ownerDocument.defaultView ?
element.ownerDocument.defaultView : window;
return view.getComputedStyle ?
view.getComputedStyle(element,null).getPropertyValue(styleProp) :
element.currentStyle ?
element.currentStyle[styleProp] : null;
}
El propio elemento se debe pasar, no el id. Creo que esto es probablemente preferible de todos modos. Esto obtiene el documento que contiene el nodo y la ventana asociada a él. Tiene una alternativa a la ventana actual getComputedStyle
si ownerDocument
o defaultView
están rotos (recuerdo vagamente que getComputedStyle
estaba antes que defaultView
). Esto es probablemente más cercano al uso previsto de defaultView
.
Lo mismo sucedería con otra forma de expresión que ser, solo es útil si todavía no tiene un control para la ventana/global asociado con el documento? –
no necesariamente - Como he dicho, puede tener varios documentos diferentes (iframes) por lo que es un enlace a esa ventana específica (por ejemplo, 'iframe.contentWindow' contra' window' vs 'iframe2.contentWindow'). También se puede mover un documento, por lo que incluso si almacena ese enlace original, puede cambiarlo. Esto es, creo, una forma segura de referenciar 'ventana actual' del' documento' –
Tienes razón. Actualizando la pregunta con una nueva propuesta sobre cómo debería verse la función. –