2009-08-31 3 views
3

Dnn 모듈을 개발 중이며 일부 모듈에서 jQuery를 사용하고 있습니다. 사용자가 매번 참조하는 페이지에 여러 모듈을 추가 할 때마다 각 ascx 파일의 맨 위에 jQuery 참조를 추가합니다. 모듈을 추가 할 때,이 상황은 몇 가지 오류를줍니다. jQuery를 사용하는 다른 모듈의 맨 아래에있는 모듈에서 참조를 제거하면 좋은 결과를 얻을 수 있습니다. 여러 참조가 jQuery를 참조하지 못하도록하는 방법이 있습니까? 내 말은 그것이 다시 참조하지 않습니다 befeore 페이지에서 참조하는 경우. 고마워요.jQuery 다중 참조 방지

당신은 jQuery를 페이지에 존재하고, 존재하지 않는 경우에만 있는지 확인하는 작은 스크립트를 만들 수

답변

6

,로드 :

// 'load-jquery.js' 
window.onload = function() { 
    if (window.jQuery === undefined) { 
    var script = document.createElement('script'); 
    script.src = 'path/to/jquery.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(script); // load jQuery 
    } 
}; 
2

이 높은 충돌 환경에서 jQuery를로드하는 경우, 시도 네임 스페이스 jQuery.

SOMETHING = { 
    jQuery: jQuery, 
    $: $ 
} 

그리고 뭔가를 통해 jQuery를 호출합니다. $ 또는 SOMETHING.jQuery을. 원하는 jQuery 버전이로드 된 즉시 네임 스페이스를 수행해야합니다. 그렇지 않으면 잘못된 결과가 발생할 수 있습니다. jQuery 파일에 액세스 할 수 있다면 가장 쉬운 방법은 파일의 끝에 네임 스페이스 코드를 추가하는 것입니다.

3

DNN 5.x를 사용하는 경우 DotNetNuke.Framework.jQuery.RequestRegistration()을 호출하여 DNN 코어의 jQuery 버전을 사용해야합니다.

모듈 내에서 충돌 만 처리하는 경우 코드에 스크립트를 추가 한 다음 이미 추가되었는지 확인할 수 있습니다. 헤더에 jQuery를 수동으로 추가하고 (일반 HTML 컨트롤을 만들어 Page.Header.Controls에 추가 한 다음) Page.ClientScript.RegisterClientScriptBlock()을 호출하여 jQuery.noConflict을 호출하는 스크립트 블록을 만듭니다 (DNN의 JavaScript 요소를 방해하지 않도록). Page.ClientScript.IsClientScriptBlockRegistered()에 대한 호출에서 jQuery를 추가하기 위해 전체 호출을 래핑 할 수 있으므로 한 번만 추가됩니다.