2009-10-13 7 views
0

프로토 타입 v.1.6.0.3에서 JavaScript 라이브러리를 사용하고 있습니다. 기본 표기법 $가 Mozilla에서는 제대로 작동하지만 IE6에서는 제대로 작동하지 않습니다. > 단지 모질라 프로토 타입 Javascript, Mozilla에서 작동하지만 IE에서는 작동하지 않음

내가 여기에 놓친 거지 무슨 궁금에서 작업 -> IE & 모질라

  • 에서 근무 $('div123').hide(); -

    여기에 간단한 예를

    • Element.hide('div123');입니다 나는 IE에서 IE처럼 작동하지 않는 다른 케이스도 있으므로 & 드롭 (IE에서는 떨어지지 않지만 모질라에서는 괜찮습니다.)과 같은 것들이 있습니다. 제 이해에서 프로토 타입은 "지원"IE입니까?

  • +2

    간단한 테스트 IE6에서 작동하는 것 같습니다 : http://jsbin.com/usaca 다른 JavaScript 라이브러리 (예 : jQuery)를 사용하고 있습니까? – brianpeiris

    +0

    brianpeieris 고맙습니다. IE6의 모든 이상한 것들이 다른 라이브러리에 의해 발생했습니다. mootools.js 정말 도움이됩니다 !! – beng

    답변

    1

    게시 된 코드에 오류가 있다고 생각하지 않습니다. 두 버전 모두 나를 위해 작동하며 두 브라우저 모두 다른 브라우저에서 전혀 다른 작업을 수행하지 않습니다.

    그러나 Prototype은 IE와 Mozilla에서 매우 다른 방식으로 작동하며, 코드의 다른 부분에서 차이가 발생할 수 있습니다.

    Mozilla에서 Prototypre는 메소드를 HTMLElement 외의 프로토 타입에 추가하여 모든 DOM 객체가이 메소드를 직접 호출 할 수 있도록합니다. 그러나 이것은 IE (*)에서는 불가능하므로 모든 브라우저를 커버하려면 메소드를 호출하려는 각 노드를 명시 적으로 "추가"해야합니다 (Element.extend을 명시 적으로 호출하거나 Prototype의 자체 메소드 중 하나를 사용하여 암시 적으로 호출). $ 기능으로, 개체에 대한 핸들을 얻을 수 있습니다 :

    document.getElementByID('foo').hide(); // ok on Mozilla, fail on IE 
    
    $('foo').hide(); // ok everywhere 
    
    Element.hide('foo'); // ok everywhere 
    
    Element.extend(document.getElementByID('foo')); 
    document.getElementByID('foo').hide(); // ok everywhere 
    

    이 실제로 프로토 타입의 최악의 기능 중 하나입니다, 당신이 IE에서 실패 통지하지 않습니다 모질라 코드의 부하를 쓸 수 있기 때문에 : 그렇지 않아 브라우저 차이를 너무 많이 숨겨서 증폭시키는 것입니다. 더 나쁜 무엇

    , 프로토 타입의 자신의 방법의 많은 암시 적으로 객체를 확장하기 때문에 한 번 확장 때문에, 그 노드는 확장을 유지, 그것은 IE에서 코드 요소를 확장 잊어 상황을 취득하는 것은 매우 쉽습니다 것이다 일반적으로 일 다른 어떤 것이 이미 그것을 확장했기 때문에, 어떤 더 희소 한 상황에서 그것은 폭발 할 것입니다. 이것은 디버깅에 좋지 않습니다.

    (* : IE의 잘못이 아닙니다 .ECMAScript 표준에서는 생성자 함수에서 핸들을 얻을 수 있다고하더라도 DOM과 같은 '호스트 객체'의 프로토 타입을 변경할 수 있다는 기대는 없습니다. 프로토 타입은 비표준 기능을 활용하여 코드를 잠재적으로 더 멋지게 보이게하지만 실제로 슬프게도이를 활용할 수는 없습니다.)

    관련 문제