2012-04-25 6 views
1

사람들이 자신의 웹 사이트에 복사하여 붙여 넣을 수있는 코드를 만들었으며 블로그 스팟에서 작동해야합니다. 이 코드에는 jQuery와 jCarousel 플러그인이 필요합니다. 내 자바 스크립트 코드를 실행하기 전에 jQuery를로드 블로거 게시물에 jQuery를로드하면 동결됩니다.

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 

를 사용합니다. 문제는 일부 블로거 템플릿이 jQuery를 이미로드 한 다음 위의 코드를 실행하면 블로그 게시물이로드되지 않게된다는 것입니다 (로드하는 화면에 그대로 유지됨).

if (typeof jQuery == "undefined") 뒤에 javascript를 사용하여로드 할 수 있지만 jCarousel 플러그인이 작동하려면 jQuery를 먼저로드해야합니다. 이로 인해 게시물이로드되지만 캐 러셀이 중단됩니다.

아무 해결책이 있습니까?

+0

당신이 jQuery를이 – ManseUK

답변

5

jQuery의 존재를 확인하고 그 후에도 jCarousel을로드 할 수 없습니까? 두 번째 생각에

<script type="text/javascript"> 
    if (typeof jQuery === "undefined") { 
     document.write('<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"><\/script>'); 
    } 
</script> 

<script src="http://path/to/jcarousel" type="text/javascript"></script> 

, 나는이 항상 작동 확신 아닙니다. jQuery가 jCarousel보다 먼저로드 될 것이라고 보장하지는 않는다. 더 견고 해 보이는 대체 솔루션을 생각해 냈습니다. jQuery를로드 한 다음 jQuery를 사용하여 $.getScript()을 사용하여 라이브러리를로드합니다. 그런 다음 코드가 getScript의 콜백에서 호출됩니다.

<script type="text/javascript"> 
    if (typeof jQuery !== "undefined") { 
     loadLibs(); 
    } else { 
     var script = document.createElement('script'); 
     script.src = 'http://code.jquery.com/jquery.js'; 
     document.getElementsByTagName('head')[0].appendChild(script); 
     var timeout = 100; // 100x100ms = 10 seconds 
     var interval = setInterval(function() { 
      timeout--; 
      if (window.jQuery) { 
       clearInterval(interval); 
       loadLibs(); 
      } else if (timeout <= 0) { 
       // jQuery failed to load 
       clearInterval(interval); 
      } 
     }, 100); 
    } 

    function loadLibs() { 
     $.getScript("http://sorgalla.com/projects/jcarousel/lib/jquery.jcarousel.min.js", function(data, textStatus, jqxhr) { 
      myCode(); 
     }); 
    } 

    function myCode() { 
     $(document).ready(function() { 
      $('#mycarousel').jcarousel(); 
     }); 
    } 
</script> 

데모 :이 모든 것이 적절한 순서로 발생하는 것을 보장한다. http://jsfiddle.net/jtbowden/Y84hA/2/

이 (jQuery를, 또는 다른 라이브러리의 버전으로 왼쪽 열에서 프레임 워크를 변경 그것은 항상 올바르게 회전 목마를로드한다)

편집 :

이 버전은 비슷하지만, 단지 jQuery를 위해 같은 lib 디렉토리에 대한 <head>로드를 사용합니다. 그것은 $.getScript()보다 빠른 :

http://jsfiddle.net/jtbowden/y8nGJ/1/

+0

그래서 간단한로드 감사를 확인한 후 jQuery를하고 jCarousel 스크립트를로드하지 왜! 이제 나는 어리 석다! – Timm

+0

편집 해 주셔서 감사합니다. 그러나 이것은 로딩 시간을 크게 늘리는 것으로 보입니다. (이전에 아주 비슷한 것을 시도해 봤지만 페이지 로딩 시간에 몇 초를 더하는 느낌이 들지 않았습니다.) – Timm

+0

동일한 대답을 사용하는 내 대답에 버전을 추가했습니다. head'로드를 jQuery로드에 사용합니다. 'getScript()'보다 꽤 빠르다. –

관련 문제