Какая точка document.defaultView
?
В браузерах возвращается объект окна, связанный с документом, или null, если он недоступен.
Код, подобный следующему (из сайта PPK) использует 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;
}
Код, подобный этому, можно найти в других местах, таких как David Mark My Library. Я не уверен, что люди просто копируют из ППК или какого-то другого источника или придумывают это самостоятельно, но я этого не понимаю.
Мой вопрос: в чем смысл использования document.defaultView
в таких случаях? Было бы проще записать это следующим образом:
function getStyle(element, styleProp) {
if (element === ''+element) element = document.getElementById(element);
return element.currentStyle ? element.currentStyle[styleProp] :
getComputedStyle(x,null).getPropertyValue(styleProp);
}
Что делает document.defaultView.getComputedStyle
сделать это window.getComputedStyle
или просто getComputedStyle
не?
Ответ cwolves заставил меня думать в правильном направлении. Исходная функция глупа, не хватает точки defaultView
. Мое предложение выше менее глупо, но также не хватает точки defaultView
. Здесь мое новое предложение:
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;
}
Сам элемент должен быть передан, а не идентификатор. Я думаю, что это, вероятно, все равно будет предпочтительным. Это получает документ, содержащий node и связанное с ним окно. Он имеет откат к текущему окну getComputedStyle
, если ownerDocument
или defaultView
сломаны (я смутно помню, что getComputedStyle
был вокруг до defaultView
). Вероятно, это ближе к предполагаемому использованию defaultView
.