1

以前に変更した 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>

*: プロパティは Opera では列挙できませんが、とにかく列挙されます!!!

for (p in link) 
    if (p==="onclick") 
        alert (p); // onclick

プロパティを割り当てる前に削除することで、Chrome で3 番目のalert出力を作成できます。trueonclick

delete link.onclick;

しかし、プロパティはまだ Safari で列挙されていません。

私は EcmaScript 5 Object メソッドdefinePropertyで試してみました:

Object.defineProperty (link, onclick, {
    value: foo,
    enumerable: true,
    configurable: true,
    writable: true
});

しかし、それはエラーを返します:

TypeError: defineProperty は DOM オブジェクトではサポートされていません

助言がありますか?

PS Safari と Chrome はどちらも Webkit に基づいているのに、なぜ動作が異なるのですか?

4

1 に答える 1

0

useragent を、 EcmaScript5 Object メソッドがWebkit JavaScriptCoreに実装された Webkit バージョンと比較します。Chrome の Webkit バージョンは Safari のバージョンとは異なるため、標準サポートはそれに応じて異なります。

于 2012-08-29T17:49:43.707 に答える