0

私は SWFObject を使用しており、代替コンテンツ (Flash なし) には jQuery プラグインを使用したいと考えています。
明らかに、Flash が利用できない場合にのみ、jQuery とプラグイン スクリプトをロードしたいと考えています。したがって、Google の API ローダーは完璧に思えます。

今、setOnLoadCallback()イベントで悩んでいます。本来のようにトリガーされるようですが、DOM の準備が整う前でしょうか? SO に関する別の質問を見つけたところ、DOM ロード時に文書化されていない 2 番目のパラメーターがあることが明らかになりましたが、
まだ 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>

編集: jQuery のようなライブラリの google.load は window.load でのみ使用できるようです
コールバックを使用して動的にロードできる Google 独自の API はごくわずかです
参照: Google ライブラリ API - google.load はイベントからロードされませんか?

4

2 に答える 2

1

jQueryLoadedが呼び出されたとき、DOM は実際には準備ができていないと思われます。おそらく、swfobject.embedSWFが に登録されたコールバックから呼び出されていることを確認する必要がありますswfobject.addDomLoadEvent

于 2010-11-06T20:34:56.080 に答える
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>
于 2010-11-07T09:37:47.417 に答える