2014-10-13 2 views
0

Rhino 용 사용자 지정 DOM을 만들고 있습니다.Rhino에서 document.all()을 지원할 수 있습니까?

아시다시피 레거시 IE는 'nice'document.all() 기능을 지원하여 노드를 선택합니다.

그것은 방법으로 다음과 같이 호출 할 수

내가 처리 할 수 ​​

public object all(object ___param) 
{ 
    return ....; 
} 

쿼리 X로 내 DOM에 함수를 선언하지만, 코뿔소가 생각하기 때문에 (Y는 오류가 발생합니다 쿼리 할 경우

X) document.all(1).tagName 

Y) document.all.[object id].tagName 

그것은 재산입니다.

대신, 나는 재산을 넣으면

public object all 
{ 
    get 
     { 
       returns ...; 
     } 
} 

이제 쿼리 Y를 처리 할 수 ​​있지만 쿼리 X는 속성이므로 오류가 발생합니다.

는 쿼리 X 및 쿼리 Y 모두를 처리하는 함수 객체를 생성 할 수 있습니다 (내가 자바 스크립트 인터프리터의 Rhino 내에서 선택 중 하나를 포기.이 것 같다)?

미리 감사드립니다.

답변

1

여기 몇 가지 문제가 있습니다.

먼저 Y의 구문이 올바르지 않습니다. 그것은해야한다 :

document.all[object id].tagName 

둘째, 호환성을 걱정하는 경우, alleven in Internet Explorer가되지 않습니다.

세 번째로 public object all 예는 deprecated JavaScript syntax에 의존합니다. Object.defineProperty을 사용하려고합니다.

그 외에도 해결해야 할 또 다른 문제가 있습니다. JavaScript 객체가 속성 이름을 처리하는 "캐치 올 (catch-all)"메서드를 갖는 표준 방법은 없으며 Rhino에서도 사용할 수 없습니다. 찾고있는 사람은 document.all입니다. (ECMAScript 6의 개발 사양에는 "프록시"라고하는 기능을 사용할 수 있지만 Rhino에서는 지원되지 않습니다.) 그래서 실제로 사용할 수있는 유일한 방법은 자바 측에서 기능을 정의하는 것입니다 (ScriptableObject 참조). 예) 속성 액세스에 대한 호출을 차단합니다. 또는 객체를 불변으로 처리하는 해킹을 수행 할 수 있으므로 document 객체의 초기화시 document[propertyname]의 모든 값을 초기화 할 수 있지만 DOM을 수정하면 작업이 중단됩니다.

제 추천은, 이럴 가치가 없다는 것입니다. 그러나 그것이 있다면, 로드맵이 있습니다.

+0

웹 개발자를 위해 document.evaluate() 및 querySelector()와 같은 더 나은 API가 있습니다. 나는 너와 완전히 동의한다. 더 이상 "document.all"이 아닙니다. –

관련 문제