2010-11-06 3 views
0

Я использую SWFObject и для альтернативного контента (без Flash) Я хочу использовать плагин jQuery.
Очевидно, что я хочу загрузить jQuery и скрипт плагина только тогда, когда Flash недоступен. Таким образом, API-загрузчик Google кажется идеальным.Google API Loader setOnLoadCallback() - готов ли DOM?

У меня возникли проблемы с событием setOnLoadCallback(). Кажется, это срабатывает, как должно, но, может быть, до того, как DOM будет готов? Я нашел another question на открытии SO, есть второй недокументированный параметр, на загрузке DOM.
, но я до сих пор не могу получить доступ к jQuery!

<script type="text/javascript" src="https://www.google.com/jsapi?key=INSERT-YOUR-KEY"></script> 
<script type="text/javascript"> 
    google.load("swfobject", "2.2"); 
</script> 
<script type="text/javascript"> 
    swfobject.embedSWF("slideshow.swf", "slideshow", "800", "530", "7","expressInstall.swf", null, null, null, flashNotLoaded); 

    function flashNotLoaded(e) { 
     if (!e.success) { 
      google.load("jquery", "1.4.2"); 
      google.setOnLoadCallback(jQueryLoaded, true); 
     } 
    } 

    function jQueryLoaded() { 
     alert("jquery loaded"); 
     $("body").css("background-color","ff00ff"); // does not work.... 
     $(function() { 
      $("body").css("background-color","ff0000"); // neither does this... 
     }); 
    } 
</script> 

EDIT: кажется, что google.load для библиотек, как JQuery доступен только на window.load
Лишь немногие из Google собственных API может быть динамически загружен с обратными вызовами
См: Google Library API - google.load does not load from event?

+0

Возможно, ваш обратный вызов будет запущен в результате загрузки swfobject, а не jQuery? –

+0

, который вызывает обратный вызов? – FFish

ответ

0

@MPD заметил, что DOM не готов, поэтому я использовал swfobject.addDomLoadEvent с обратным вызовом.
У вас здесь google.load("jquery", "1.4.3"); jQuery не загружается?

<script type="text/javascript" src="https://www.google.com/jsapi?key=INSERT-YOUR-KEY"></script> 
<script type="text/javascript"> 
    google.load("swfobject", "2.2"); 
    google.setOnLoadCallback(swfobjLoaded); 

    function swfobjLoaded() { 
     swfobject.embedSWF("slideshow.swf", "slideshow", "800", "530", "7","expressInstall.swf", null, null, null, swfobjSuccess); 
     swfobject.addDomLoadEvent(swfobjDOMReady); 
    } 

    var isSWFEmbedded = true; 
    function swfobjSuccess(e) { 
     if (!e.success) { 
      isSWFEmbedded = false; 
     } 
    } 

    function swfobjDOMReady() { 
     if (!isSWFEmbedded) { 
      alert("dom is ready, Flash is not embedded, now load jquery"); // everything works fine untill here 
      google.load("jquery", "1.4.3"); // does not load, page goes blank?? 
      google.setOnLoadCallback(jqueryLoaded); 
     } 
    } 

    function jqueryLoaded() { 
     $("body").css("background-color","ff0000"); 
    } 
</script> 
+0

см. EDIT в верхнем вопросе – FFish

1

Я подозреваю, что DOM на самом деле не готов, когда вызывается jQueryLoaded. Вероятно, вы должны убедиться, что swfobject.embedSWF вызывается из обратного вызова, зарегистрированного с помощью swfobject.addDomLoadEvent.

+0

спасибо за это, я не могу загрузить с google.load ("jquery", "1.4.3"); от обратного вызова .addDomLoadEvent. – FFish

+0

Спасибо за информацию. Несколько заметок. swfobject предоставляет Flash-обнаружение с помощью API, поэтому вам действительно не нужно внедрять и использовать обратный вызов. Вам действительно нужно использовать swfobject из DOM, чтобы убедиться, что используемый вами элемент существует. Ваш метод в конечном итоге сделает три сетевых нагрузки вместо двух, просто загрузив swfobject и jQuery из CDN. – mpdonadio