2010-02-10 2 views
2

jQuery (이 경우 jFeed)에 사용했던 플러그인이 작동하지 않는 곳에서 디버깅하는 데 시간이 걸리는 문제가 발생했습니다. 우리가 Amazon Associates product previews을 사용했기 때문에 문제가 끝났습니다. 제품 미리보기 코드는 jQuery의 다른 사본을 포함하여 document.write()를 통해 여러 다른 JS 파일을 포함하여 끝납니다. jFeed 스크립트 아래에 제품 미리보기 코드가 표시되었으므로 jQuery는 getFeed 함수없이 다시 정의되었습니다.jQuery가 재정의되는 것을 막는 좋은 방법이 있습니까?

jQuery와 같은 특정 객체가 페이지에서 한 번만 정의되도록하는 것이 가장 좋습니다. #ifndef C/C++와 같은 것을 생각하고 있지만이 경우 동적으로 jQuery를 가져온 코드를 작성하지 않은 경우 어떻게 작동하는지 모릅니다.

답변

2

, 그것은 아마도 jQuery를 변수를 재정의하는 가장 좋은 것입니다 다른 것으로. 다른 jQuery 코드는 다른 버전을 사용할 수 있으므로 사용중인 jQuery를 나타내는 새 변수를 정의하고자 할 수 있습니다.

당신은 정말 이런 식으로 뭔가를 할 수 :

<script> 
    var $jMain = jQuery; 
</script> 

당신은 단지 대신 jQuery 또는 $$jMain 사용할 수 있습니다. 이 작업을 수행 할 때 올바른 jQuery 객체가 있는지 확인하는 것은 당신에게 달려 있습니다. 여기에 documentation이 있습니다.

0

유감스럽게도 브라우저 나 브라우저 프레임과 같은 하나의 JS 샌드 박스 내의 환경은 다양한 장소에서 스크립트를 가져 오는 현대적인 세계를 지원하기 위해 실제로 설계되지 않았습니다. "이 객체를 정의하고 재정의에 내성을 갖게"할 수있는 방법은 없습니다. (시도하면 자바 스크립트 내장 함수의 대부분을 재정의 할 수도 있습니다!)

가장 좋은 방법은 코드가 마지막으로 eval 된 상태인지 확인하는 것입니다. 실행됩니다. 그렇다고해서 나중에 다른 코드가 나오지 않아서 정의를 파기 할 수는 없지만, 일반적으로 정말 나쁜 형태입니다. 예를 들어 스크립트 태그를 문서 본문의 마지막 요소로 사용하여이 작업을 수행 할 수 있습니다.

참조는 직접 도움, 그러나 당신이 페이지 공유 몇 가지 솔루션에 대한 생각을 얻을하지 않습니다이 jQuery를 방법,

: 현재 상황에서 내가 생각 http://api.jquery.com/jQuery.noConflict/