0

我正在使用 SWFObject,而对于替代内容(无 Flash),我想使用 jQuery 插件。
显然,我只想在 Flash 不可用时加载 jQuery 和插件脚本。所以 Google 的 API Loader 看起来很完美。

现在我遇到了这个setOnLoadCallback()事件的问题。它似乎应该被触发,但可能在 DOM 准备好之前?我在 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>

编辑:似乎 jQuery 之类的库的 google.load 仅在 window.load 上可用
只有少数 Google 自己的 API 可以通过回调动态加载
请参阅:Google Library API - google.load 不从事件加载?

4

2 回答 2

1

我怀疑 DOM 在jQueryLoaded被调用时实际上还没有准备好。您可能应该确保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 回答