什么'这是文档的要点.默认视图
What's the point of document.defaultView?
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;
}
像这样的代码可以在其他地方找到,比如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
不能做什么?
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;
}
必须传入元素本身,而不是id。我认为这可能是首选。这会得到包含节点的文档以及与之相关的窗口。如果ownerDocument
或defaultView
坏了,它会回退到当前窗口的getComputedStyle
(我模糊地记得getComputedStyle
在defaultView
之前)。这可能更接近defaultView
的预期用途。
OP问"document.defaultView
有什么意义"这个问题,答案实际上与getComputedStyle无关。如果有对window
中包含的document
对象的引用,则document.defaultView
属性只是获得window
对象的一种方式。在某些情况下,您要引用的window
对象(或defaultView
)与您正在运行的代码不在同一窗口范围内。
其中一个例子是,如果您有对iframe中document
对象的引用,并且希望方便地获得对该iframe的window
对象的引用。
另一种情况可能是,您在浏览器范围内的特权上下文中运行(例如,Firefox中的chrome代码),并且您碰巧引用了选项卡浏览器或其他窗口的document
对象。
或者,正如Dagg Nabbit所指出的,如果在这些情况下,您有对窗口中某个元素的引用,则可以通过element.ownerDocument.defaultView
访问该元素的父window
我对此并不肯定,但我认为这是修复了一个错误的结果,无论是试图在分离的文档上运行代码(即内存中存在但不在页面中的东西),还是试图在不同的窗口中在文档上运行(如iframe或弹出窗口)。
根据您的报价,当document.defaultView
在不是当前文档的文档上运行时,您将获得关联的窗口对象,因此document.documentView.getComputedStyle !== getComputedStyle
,因为它们处于不同的上下文中。
简而言之,我相信它类似于不存在的document.window
。
据我所知,这只是一个抽象,以防任何用户代理弹出DOM实现,但不提供窗口形式的视图。请参阅DOM级别2中的视图。
根据MDN getComputedStyle
文章,
在许多联机代码示例中,
getComputedStyle
是从document.defaultView
对象。在几乎所有情况下,这都是不必要的,因为CCD_ 33也存在于CCD_。
很可能是defaultView模式是的某种组合
- 不想为window和
- 使API在Java中也可用
然而,有一种情况是
defaultView
的方法必须使用:当使用Firefox 3.6访问框架样式时。
- 如何设置默认<ui视图>在另一<ui视图>
- 如何在默认情况下将主干视图设置为singleton
- 将范围添加到角度种子默认视图控制器时,测试套件现在失败
- 更改ng包含或定义默认ui视图
- 如何设置默认视图位置(铯1.6)
- MVC 3,剃刀视图 - 覆盖默认表单帖子
- 更改完整日历的议程日视图中的默认事件宽度
- KML 在加载后覆盖默认视图
- 详细信息视图 ASP.Net 取消客户端的默认编辑模式
- 角度视图自动重定向到默认(否则)视图
- 如果数据字段为空,如何在视图中显示默认值,以角度.js表示
- 默认情况下,引导菜单在移动视图中不折叠
- HTML DOM 从哪里开始?窗?公文?文档默认视图
- 什么'这是文档的要点.默认视图
- Geogebra Javascript - 如何为在图形视图中创建的每个数学对象默认没有标题
- 获取threejs场景和相机方向以设置默认视图
- 如何通过JS在Sharepoint 2013列表视图中触发默认渲染Link
- 谷歌地图地形视图默认
- Angular ui-router:容器视图和默认视图
- 根据用户偏好设置FullCalendar默认视图