我们可以删除“getcontext”吗?属性的HTML5画布标签通过脚本
Can we delete the "getContext" property of HTML5 Canvas tag through script?
有一个HTML5一致性测试套件,其中包含对HTMLCanvasElement
原型的测试。
此测试在Safari, Firefox上失败,但在Windows 7上通过Opera。
测试有一个脚本,试图删除HTMLCanvasElement
的getContext
属性,并进一步尝试读取getContext
应给出undefined
。
delete window.HTMLCanvasElement.prototype.getContext;
_assertSame(window.HTMLCanvasElement.prototype.getContext, undefined, "window.HTMLCanvasElement.prototype.getContext", "undefined");
这个测试在WebKit (Safari)中失败,因为getContext
属性有DontDelete
属性,所以它不允许脚本删除这个属性。
在HTML5规范中是否有任何描述说删除getContext
属性的脚本是有效的?
在HTML5规范中是否有任何描述说删除脚本的getContext属性是有效的?
没有,规范中没有明确说明。不知道为什么webkit不同于FF/Opera在这里(它是Chrome也不允许删除),但规范本身并不要求DontDelete对画布上的任何东西。ECMAScript规范中的其他内容可能会。
Firefox 7和8 alpha不会删除window.HTMLCanvasElement.prototype.getContext。它们只是返回true,但是getContext仍然在那里。换句话说,您链接到的测试在完全相同的位置和相同的原因失败。
Webkit当然允许你覆盖任何你想要的:window.HTMLCanvasElement.prototype.getContext = undefined
据我所知,getContext
方法的可配置性(ES3中的[[DontDelete]], ES5中的[[Configurable]])在WebIDL中被描述为任何其他CanvasRenderingContext2D
方法。
看一下"接口原型对象"节,它说:
对于定义的每个接口必须存在一个接口原型对象,无论该接口是否用[NoInterfaceObject]扩展属性声明。特定接口的接口原型对象具有与该接口上定义的属性和操作相对应的属性。这些属性将在下面的4.5.5和4.5.6节中进行更详细的描述。
在4.5.6中,你可以看到:
对于接口上定义的操作的每个唯一标识符,必须在接口原型对象(如果它是常规操作)或接口对象(如果它是静态操作)上有相应的属性,除非该标识符和操作的有效重载集并且参数计数为0(对于ECMAScript语言绑定)没有条目。
这种对应属性的特征如下:
属性的名称是标识符。
属性有属性{[[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}。
注意"[[可配置]]:true"
- 在<页眉>标签
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- iframe正在添加标签,需要删除它们
- Ember.js 带有 ember 路由器的标签标签的文本字段 ID
- 标签标签中的复选框:Chrome和Firefox中的不同结果
- 如何从标签标签中获取名称
- 防止<标签>标签>调整大小
- 如何使用javascript从标签标签中获取文本
- 我可以用标签做标签标签吗
- 模式窗口上的标签标签不起作用
- 在我的标签标签后预先键入span标签以进行搜索.如何正确添加标签
- 单选按钮在标签标签内使用时发生故障
- 如何使用css选择没有span的标签标签
- 在Rally中抓取标签/标签的名称属性
- jQuery根据标签标签从span标签返回文本
- 我如何添加一个标签/标签出现在几个对象的顶部,以便当用户单击对象时,标签始终面向相机
- 将javascript放入html标签标签中
- 如何使用jquery更新标签标签
- Javascript隐藏内容在标签标签和标签标签之后
- 当输入值不为空时,标签标签应保持在顶部