이전에 수정 한 DOM 요소의 모든 속성을 열거해야합니다. 파이어 폭스, 크롬, 오페라로 할 수는 있지만 사파리로는 할 수 없었다. (나는 IE에 대해서는별로 신경 쓰지 않는다.)Safari에서 DOM 핸들러를 열거 할 수있게 만드는 방법은 무엇입니까?
<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에서 열거 할 수 없지만 어쨌든 열거됩니다!
delete link.onclick;
을하지만 속성은 아직 사파리에 열거되지 않은 :
for (p in link)
if (p==="onclick")
alert (p); // onclick
나는 그것을 할당하기 전에 onclick
속성을 삭제하여 크롬의 세 번째 alert
출력 true
을 만들 수 있습니다.
난 ECMA 스크립트 5 개체 방법 defineProperty으로 시도 :
Object.defineProperty (link, onclick, {
value: foo,
enumerable: true,
configurable: true,
writable: true
});
하지만 오류 반환 :
TypeError: defineProperty is not supported on DOM Objects
어떤 제안?
P. Safari는 Webkit을 기반으로하지만 Chrome과 다른 점은 무엇입니까?
PS에 대한 답변 : Webkit은 렌더링 엔진입니다. Javascript의 경우 Safari는 JavaScriptCore 엔진 (Squirrelfish)을 사용하고 Chrome은 V8을 사용합니다. – Martijn