Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Safari中使DOM处理程序可枚举?_Javascript_Safari_Webkit_Ecmascript 5_Dontenum - Fatal编程技术网

Javascript 如何在Safari中使DOM处理程序可枚举?

Javascript 如何在Safari中使DOM处理程序可枚举?,javascript,safari,webkit,ecmascript-5,dontenum,Javascript,Safari,Webkit,Ecmascript 5,Dontenum,我需要枚举我以前修改过的DOM元素的所有属性。我可以用Firefox、Chrome和Opera来做,但我不能用Safari,我现在不在乎IE <a id="link">Link...</a> <script> var link = document.getElementById("link"); var foo = function (baz) {}; link.onclick = foo; alert ("onclick" i

我需要枚举我以前修改过的DOM元素的所有属性。我可以用Firefox、Chrome和Opera来做,但我不能用Safari,我现在不在乎IE

<a id="link">Link...</a>
<script>
    var link = document.getElementById("link");
    var foo = function (baz) {};
    link.onclick = foo;
    alert ("onclick" in link); // true
    alert (link.hasOwnProperty("onclick")); // true
    alert (link.propertyIsEnumerable("onclick")); 
    // false with Chrome, Safari, Opera*
</script>
我可以通过在分配onclick属性之前删除它,在Chrome中实现第三个警报输出:

delete link.onclick;
但Safari中尚未列举该属性

我甚至尝试了EcmaScript 5对象方法:

但它返回错误:

TypeError:DOM对象不支持defineProperty

有什么建议吗


另外,为什么Safari的行为与Chrome不同,尽管它们都基于Webkit?

将其与在中实现ECMAScript 5对象方法的Webkit版本进行比较。Chrome的Webkit版本与Safari不同,因此标准支持也会相应不同。

回答您的问题:Webkit是渲染引擎。对于Javascript,Safari使用JavaScriptCore引擎SquirreFish,Chrome使用V8。
delete link.onclick;
Object.defineProperty (link, onclick, {
    value: foo,
    enumerable: true,
    configurable: true,
    writable: true
});