以前に変更した 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
出力を作成できます。true
onclick
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 に基づいているのに、なぜ動作が異なるのですか?