首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以通过脚本删除HTML5画布标签的getContext属性吗?

可以通过脚本删除HTML5画布标签的getContext属性吗?
EN

Stack Overflow用户
提问于 2011-10-01 02:26:21
回答 2查看 629关注 0票数 3

有一个针对HTMLCanvasElement原型的测试的HTML5 conformance test suite

此测试在Safari和Firefox上失败,但在Windows7上通过Opera。

这个测试有一个脚本,它试图删除HTMLCanvasElementgetContext属性,并且进一步尝试读取getContext应该会得到undefined

代码语言:javascript
复制
delete window.HTMLCanvasElement.prototype.getContext;
_assertSame(window.HTMLCanvasElement.prototype.getContext, undefined, "window.HTMLCanvasElement.prototype.getContext", "undefined");

对于WebKit (Safari),此测试失败,因为getContext属性具有DontDelete属性,因此它不允许脚本删除此属性。

HTML5规范中有没有说明通过脚本删除getContext属性是有效的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-03 13:23:57

据我所知,getContext方法的可配置性(在ES3中为[DontDelete],在ES5中为[可配置])在WebIDL中描述-就像任何其他CanvasRenderingContext2D方法一样。

看看"Interface Prototype Object"部分,它说:

对于定义的每个接口,无论该接口是否使用NoInterfaceObject

属性声明,都必须存在一个接口原型对象。特定接口的接口原型对象具有与该接口上定义的属性和操作相对应的属性。这些属性在下面的4.5.5和4.5.6节中有更详细的描述。

4.5.6中,您可以看到:

对于接口上定义的操作的每个唯一标识符,接口原型对象(如果它是常规操作)或接口对象(如果它是静态操作)上必须有相应的属性,除非为该标识符和操作设置的有效重载以及参数计数为0(用于ECMAScript语言绑定)没有条目。

这种对应属性的特征如下:

属性的名称是标识符。

该属性具有属性{ [Writable]:true,[Enumerable]:true,[可配置]:true }。

注意“[可配置]:true”位(强调我的)。

票数 2
EN

Stack Overflow用户

发布于 2011-10-01 02:59:53

在HTML5规范中有没有说明通过脚本删除getContext属性是有效的?

不,规范中没有明确的说明。不知道为什么webkit与FF/Opera不同( Chrome也不允许删除),但规范本身并不要求画布上的任何东西都使用DontDelete。ECMAScript规范中的其他内容可能会这样做。

不过,Firefox7和8alpha不会删除window.HTMLCanvasElement.prototype.getContext。它们只是返回true,但getContext仍然在那里。换句话说,由于相同的原因,您链接到的测试在完全相同的位置失败。

当然,Webkit仍然允许您覆盖您想要的任何内容:window.HTMLCanvasElement.prototype.getContext = undefined

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7614512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档