1

类似于“暂停异常”的工作原理,是否可以在创建 svg 元素并在其上设置无效属性时暂停?

这个例子(在 jsfiddle 上测试):

circle.setAttribute('fill', 'steelblue');
circle.setAttribute('r', 'big'); // A 'big' circle is obviously wrong

将在 chrome 中生成以下错误,但没有映射回生成 svg 的 javascript 调用,因此很难找到错误:

在此处输入图像描述

4

2 回答 2

2

这是不可能的,因为 svg 在浏览器中是如何呈现的。想象一下 svg 就像 XML 或 (HTML) 一样。它不像代码行那样在一个步骤过程中执行。它读入快速渲染对象及其属性的渲染引擎。在此渲染期间,必须在引擎内部发生暂停,这将导致各种渲染问题。

参考您的示例,javascript不会对您传递给 setAttribute 值的内容进行任何类型的检查(我的意思是它确实不能因为不同的属性需要不同的类型),而是将该键值对添加到元素对象。(尝试记录圆形对象,之前和之后,你会明白我的意思)。稍后,当您将圈子添加到 DOM 时,它会像我上面所说的那样简单地获取对象并解析它。

基本上这种类型的错误处理在浏览器中永远不会存在,因为您在示例中的代码是正确的并且可以正确执行,但是作为程序员,您需要确保将正确类型的值传递给 setAttribute 方法。所以它不是 javascript 中的错误,这就是为什么你没有在那里得到断点。

于 2012-06-28T00:29:27.013 回答
1

您可以创建一个进行类型检查的包装器。阅读SVG 规范以确定每个元素的属性允许使用哪些值。

于 2012-06-28T00:34:52.510 回答