Загрузчик API Google setOnLoadCallback () - готов ли DOM? - PullRequest
0 голосов
/ 06 ноября 2010

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

Теперь у меня проблемы с событием setOnLoadCallback().Кажется, он срабатывает, как и должно быть, но, может быть, до того, как DOM будет готов?Я нашел другой вопрос о том, что есть второй недокументированный параметр при загрузке 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 могут быть динамически загружены с помощью обратных вызововСм .: API Библиотеки Google - google.load не загружается из события?

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

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

0 голосов
/ 07 ноября 2010

@ 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>
...