Jaki jest sens document.defaultView
?Jaki jest sens document.defaultView?
W przeglądarkach zwraca obiekt związany z okna dokumentu lub null, jeśli brak dostępnych.
Kod jak następuje (od PPK's site) wykorzystuje 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;
}
Kod taki można znaleźć w innych miejscach, takich jak David Mark Moja biblioteka. Nie jestem pewien, czy ludzie po prostu kopiują z PPK lub z innego źródła lub wymyślają to niezależnie, ale nie rozumiem tego.
Moje pytanie brzmi, jaki jest sens używania document.defaultView
w takich przypadkach? Czy nie byłoby łatwiej napisać to w następujący sposób:
function getStyle(element, styleProp) {
if (element === ''+element) element = document.getElementById(element);
return element.currentStyle ? element.currentStyle[styleProp] :
getComputedStyle(x,null).getPropertyValue(styleProp);
}
Co document.defaultView.getComputedStyle
zrobić window.getComputedStyle
lub po prostu getComputedStyle
nie?
Odpowiedź cwolves pozwoliła mi myśleć w dobrym kierunku. Oryginalna funkcja jest niemądra, brakuje punktu defaultView
. Powyższa propozycja jest mniej głupia, ale brakuje też punktu defaultView
. Oto moja nowa propozycja:
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;
}
Sam element musi zostać przekazany, a nie identyfikator. Myślę, że to prawdopodobnie i tak będzie preferowane. Otrzyma dokument zawierający węzeł i skojarzone z nim okno. Ma on awarię do bieżącego okna getComputedStyle
, jeśli są uszkodzone (słabo pamiętam, że getComputedStyle
jest w pobliżu przed defaultView
). Prawdopodobnie jest to bliżej zamierzonego użycia defaultView
.
więc inny sposób frazowania, że być użyteczne tylko wtedy, gdy nie masz jeszcze dojścia do okna/globalnego powiązanego z dokumentem? –
niekoniecznie - Jak już powiedziałem, możesz mieć kilka różnych dokumentów (iframe), więc jest to link do tego konkretnego okna (np. 'Iframe.contentWindow' kontra' window' kontra 'iframe2.contentWindow'). Dokument można również przenosić, więc nawet jeśli przechowujesz ten oryginalny link, może on zostać zmieniony. To jest, jak sądzę, bezpieczny sposób odniesienia się do 'bieżącego okna' z' dokumentu' –
Masz rację. Aktualizowanie pytania za pomocą nowej propozycji, jak powinna wyglądać funkcja. –