6

介绍

DOMError是由 DOM 定义的接口。

我想检查浏览器是否支持它。一个天真的检查是

window.DOMError !== undefined

更好的检查是使用引发 DOMError 的操作并检查

err instanceof DOMError === true

问题

哪些操作会引发 DOMErrors?

4

3 回答 3

3

ADOMError是基于非异常的错误条件。它永远不会被抛出,除非在一个对象中实现了这两者DOMError并且DOMException可能作为DOMException.

预计具体类的实现在许多 DOM 实现DOMErrorDOMException可能是相同的,但它们在规范中是分开的,以便于具有绑定的语言,DOMException这将使重用现有实现变得困难。例如,没有本机异常的语言可能有一个带外错误信号通道,它不能真正作为对象转储到像DOMError罐头这样的属性上。

在 DOM4 中起草的 DOMError 是一个微不足道的占位符,只包含一个名称字符串。预计任何基于它的规范都会添加一些属性来封装更多有用的信息。

目前它被 W3 File API用于处理 中的错误FileReader,作为异步接口,它没有任何有用的地方来引发异常。File API 尚未向子接口或子接口添加任何额外的属性DOMError,但它和 DOM4 规范都可能在接近推荐状态之前发生变化。

最初在 DOM Level 3 Core 中引入的 DOMError 提供了一个扩展的错误接口,其中包含有关文档中错误发生位置的更深入的信息。它旨在用于 DOM Level 3 LS 中的序列化器和解析器进程,但包含在 Core 中以使用该document.normalizeDocument方法,该方法还模拟序列化/解析周期。

今天的浏览器没有 DOMError,因为它们不支持 DOM 4、DOM Level 3 LS 或normalizeDocument. 但其他非浏览器 DOM 实现可能;pxdom for one 具有 DOM 3 接口。

于 2012-02-05T17:18:29.437 回答
1

它没有在 Firefox ( source ) 中实现,Chrome 17 也没有。

w3 文档对此非常模糊。请参阅此声明:

此接口适用于希望通过异常以外的其他方式引入错误处理的其他规范。预计异常类型会被重用。

据我所知,方法抛出DOMException。由于这是标记接口(而不是异常),我认为它应该被实现而不是使用。

顺便说一句,这也存在于DOM Level 3中。

编辑:阅读 ThinkingStiff 的评论后,我很确定它不应该被抛出。你甚至不能自己扔它(Opera 11.52):

Uncaught exception: TypeError: 'DOMError' is not a constructor  
Uncaught exception: TypeError: 'DOMError' is not a function

它也是 Java DOM 实现中的一个接口:DOMError

于 2012-01-31T19:56:47.150 回答
0

DOMErrors 是在尝试创建无效的 DOM 元素或将不存在的节点作为参数传递给节点操作方法时引起的。换句话说,当操作无法执行时会引发异常。

例子:

document.querySelectorAll("div:foo");

当 div:foo 不存在时,这会导致 DOMError。

于 2012-01-31T19:50:09.117 回答