颠覆网络35天 ─ 使用MozAfterPaint调试绘图
7 August 2009原文地址:debugging painting with MozAfterPaint
系列地址:颠覆网络35天
====================================
本文作者为Robert O’Callahan,本来发布在Mozilla的互联网技术博客上。其中描述的特性是Firefox 3.5中非常有趣的特性,非常值得我们在35天计划中重新发布一次。
另外,Thomas Robinson为此作了一个非常方便的bookmarklet,方便在浏览器中调试页面绘图。
为了满足很多开发者的需求,我们在Firefox 3.5中提供了一个非常实验性质的API──在页面内容每次被绘画时激发相应事件。这个事件叫做MozAfterPaint,由文档对象激发,一直冒泡到window对象。事件提供两个属性:clientRects 和 boundingClientRect──用来表明什么被重画,同getClientRects 和 getBoundingClientRect方法使用相同的对象和坐标系统。
这对Firefox的扩展是非常有用的特性,或者是其他的“chrome”的代码例如使用canvas.drawWindow方法来截取窗体内容等。可能对类似Firebug之类的工具也会有用。同样,假如你希望向页面添加一些JavaScript代码来测量Firefox重画的区域、对象等等情况也会非常有用。
注意:
- 这个事件仅在Gecko引擎上提供。不要在公开的网页上使用这些功能──现在也没有看到有任何人会在公共网页上使用,因此也不知道这个事件会不会得到标准化的支持。
- 由于安全原因,普通网页内容仅仅会接收他自己文档中激发的重画事件──IFRAME内激发的重画不会报告给该IFRAME父辈对象上挂接的非安全监听器。
- 目前,该事件可能会在实际重画发生前被激发出。不过这应该不会有什么影响,我们将来也会解决这个问题。
- 如果你的事件处理程序做了某些再次激发重画的事情,例如改变元素的风格,你可能激发了一个死循环。你的浏览器可能还有反应,不过你的机器会着实为世界变暖贡献很多 :)
- 在可视范围外滚动区域的重画也会被激发,但是如果该区域元素具有overflow:auto属性的话就不会被激发。
- 在窗口内插件(plugins,大部分在Windows和GTK上的plugins)的重画事件不会被激发。
No comments yet