有什么意义document.defaultView?
MDN说:
在浏览器中返回与文档关联的窗口对象,如果没有,则返回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;
}
Run Code Online (Sandbox Code Playgroud)
像这样的代码可以在其他地方找到,比如David Mark的My Library.我不确定人们是否只是从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);
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
必须传入元素本身,而不是id.我认为这可能是首选.这将获取包含节点的文档以及与之关联的窗口.它有一个回退到当前窗口的,getComputedStyle如果ownerDocument或被defaultView打破(我依稀记得getComputedStyle在此之前defaultView).这可能更接近于预期用途defaultView.
Mar*_*ahn 10
我对此并不乐观,但我想这是修复一个错误的结果,试图在分离的文档上运行代码(即存在于内存中但不在页面中的内容)或尝试在文档上运行在不同的窗口(例如iframe或弹出窗口).
根据您的引用,当document.defaultView在不是当前文档的文档上运行时,您将获得关联的窗口对象,document.documentView.getComputedStyle !== getComputedStyle因为它们位于不同的上下文中.
简而言之,我认为它类似于document.window哪个不存在.
OP提出问题,“的意义document.defaultView何在”,答案实际上与getComputedStyle没有任何关系。如果引用了对象中包含document.defaultView的window对象,则该属性只是一种获取对象的方法。在某些情况下,您要引用的对象(或)与运行的代码不在同一窗口范围内。documentwindowwindowdefaultView
这样的一个例子是,如果您对documentiframe中的对象有一个引用,并且希望方便地获取window对该iframe中的对象的引用。
另一种情况可能是您在浏览器范围内的特权上下文中运行(例如Firefox中的chrome代码),并且碰巧引用document了一个标签浏览器对象或另一个窗口。
或者,正如Dagg Nabbit指出的那样,如果在上述任何一种情况下您都引用了窗口中的某个元素,则可以通过以下方式访问该window元素的父元素:element.ownerDocument.defaultView
| 归档时间: |
|
| 查看次数: |
11196 次 |
| 最近记录: |