2010-11-06 43 views
0

我正在使用SWFObject和替代内容(无Flash)我想使用jQuery插件。
很明显,我只想在Flash不可用时才加载jQuery和插件脚本。所以Google的API加载器看起来很完美。Google API加载器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> 

编辑:似乎为的google.load像jQuery库仅在window.load可用
只有少数几个谷歌自己的API的可动态加载回调
参见:Google Library API - google.load does not load from event?

+0

您的回调可能因加载swfobject而不是jQuery而被解雇? – 2010-11-06 18:16:50

+0

哪个回调被解雇? – FFish 2010-11-06 19:01:48

回答

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

请参阅编辑顶级问题 – FFish 2010-11-07 14:25:08

1

我怀疑调用jQueryLoaded时,DOM实际上并没有准备好。您应该确保swfobject.embedSWF从注册为swfobject.addDomLoadEvent的回调中被调用。

+0

谢谢你,我无法加载google.load(“jquery”,“1.4.3”);从.addDomLoadEvent的回调.. – FFish 2010-11-07 09:28:50

+0

感谢您的信息。几个笔记。 swfobject使用它的API公开了Flash检测,所以你可能并不需要嵌入和使用回调。您确实需要使用来自DOM的swfobject,以确保您使用的元素存在。只需从CDN加载swfobject和jQuery,您的方法最终将生成三个网络负载而不是两个负载。 – mpdonadio 2010-11-07 16:32:12