document.defaultView
有什么意义?
在浏览器中返回与文档关联的窗口对象,如果没有,则返回null。
以下代码(来自PPK's site)使用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的我的图书馆。我不确定人们是否只是从PPK或其他来源复制或独立提出,但我不明白。
我的问题是,在这种情况下使用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
没有做什么?
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;
}
元素本身必须传入,而不是id。我认为这可能是首选。这将获取包含节点的文档以及与之关联的窗口。如果getComputedStyle
或ownerDocument
被破坏,我会回退到当前窗口defaultView
(我依稀记得getComputedStyle
在defaultView
之前出现了defaultView
。这可能更接近{{1}}的预期用途。
答案 0 :(得分:9)
我对此并不乐观,但我想这是修复一个错误的结果,试图在分离的文档上运行代码(即存在于内存中但不在页面中的内容)或尝试运行在不同窗口中的文档(例如iframe或弹出窗口)。
根据你的引用,当document.defaultView
在不是当前文档的文档上运行时,你将获得相关的窗口对象,因此document.documentView.getComputedStyle !== getComputedStyle
因为它们处于不同的上下文中。
简而言之,我认为它与document.window
类似,但不存在。
答案 1 :(得分:4)
OP询问问题," document.defaultView
"的重点是什么,答案实际上与getComputedStyle没有任何关系。如果document.defaultView
对象具有对window
中包含的document
对象的引用,则window
属性只是获取window
对象的一种方式。在某些情况下,您要引用的defaultView
对象(或document
)与您正在运行的代码的窗口范围不同。
这方面的一个示例是,如果您在iframe中引用了window
对象,并希望方便地获取对该iframe的document
对象的引用。
另一种情况可能是您在浏览器范围中的特权上下文中运行(例如,Firefox中的chrome代码),并且您碰巧引用了tabbrowser的window
对象或其他窗口。
或者,正如Dagg Nabbit指出的那样,如果在任何一种情况下你都有一个对窗口内元素的引用,你可以通过element.ownerDocument.defaultView
访问该元素的父IFS="\n"
答案 2 :(得分:3)
就我所知,它只是一个抽象,以防任何用户代理弹出DOM实现,但不提供窗口形式的视图。请参阅DOM级别2中的Views。
答案 3 :(得分:2)
根据MDN getComputedStyle
article,
在许多在线代码示例中,使用了
getComputedStyle
document.defaultView
对象。几乎在所有情况下,这都是不必要的
getComputedStyle
对象上也存在window
。可能是
是某种组合的defaultView模式
- 人们不想为窗口和
编写规范- 制作一个也可以在Java中使用的API。
醇>然而,
defaultView
的方法有a single case 必须使用:使用Firefox 3.6访问框架样式时。