2010-07-09 5 views
1

Prototype javascript 프레임 워크를 사용하고 있습니다. 사람들이 자신의 웹 사이트에 복사하여 붙여 넣을 수 있도록 해주는 자바 스크립트 코드 스 니펫에이 스크립트를 포함 시켰습니다. 웹 사이트에 이미 Prototype이 포함되어 있거나 스 니펫을 여러 번 포함하려고 할 가능성이 있습니다. 두 경우 모두 Prototype이 두 번 정의되므로 IE7이 작동하지 않습니다. 거의 모든 Prototype 라이브러리 함수 호출에서 "Object가이 특성 또는 메소드를 지원하지 않습니다"라고 표시됩니다. 내가 이것을 실행하는 경우에만 경고를하지있어 결코 "프로토 타입을 포함하여"경고했지만, "내 코드를 실행"Prototype.js를 두 번 포함하면 IE7에서 충돌이 발생합니다.

if (typeof(Prototype) === 'undefined') { 
    alert('including Prototype'); 
    // minified Prototype code here 
} 
alert('running my code'); 
// all my code here 

: 나는 이것을 시도했다. 왜?

답변

1

"프로토 타입 포함"에만 경고가 표시되지만 "내 코드 실행 중"은 경고를받지 못했습니다. 왜?

코드를 보지 못한 채로 나는 당신이 자바 스크립트 오류 콘솔에서 어떤 것을 얻을 수 있습니까?하지만 코드의 일부는 꾸밈없는 전역 범위에 의존한다는 것입니다. 예를 들어 function 문은 표준 ECMAScript의 if 안에 사용할 수 없습니다. 시도 할 경우 실제로 어떤 일이 발생하는지 브라우저에 따라 다르지만 일반적으로 if 절이 true을 평가하지 않더라도 이전에 선언 된 버전의 함수를 재정의 할 수 있습니다.

이 문제는 DOM 메소드를 통해 페이지에 삽입 된 자체 <script> 블록에 Prototype을 넣거나 주 스크립트를 실행하기 전에 document.write로 해결할 수 있습니다. 그러나 :

내가 사람들이 자신의 웹 사이트에 복사하여 붙여 넣을 수있는 자바 스크립트 코드 스 니펫에 포함 시켰습니다.

그래, 나는 그렇게하지 않을 것이다. Prototype 또는 jQuery와 같은 광범위하고 침입적인 프레임 워크를 한 페이지에 두 개 이상 사용하면 충돌 및 잠재적으로 디버그하기 어려운 문제를 해결할 수 있습니다. 동일한 프레임 워크의 두 버전/버전과 동일합니다.

붙여 넣기 가능한 스 니펫은 다른 웹 마스터의 집에있는 게스트가되도록 공간을 적게 차지해야합니다. IMO는 어떤 프레임 워크도 사용해서는 안된다는 것을 의미합니다.

관련 문제