如何检查是不是使用带有 swfobject 的 JavaScript 加载了 swf?

Posted

技术标签:

【中文标题】如何检查是不是使用带有 swfobject 的 JavaScript 加载了 swf?【英文标题】:How to check if a swf is loaded using JavaScript with swfobject?如何检查是否使用带有 swfobject 的 JavaScript 加载了 swf? 【发布时间】:2011-04-25 18:35:21 【问题描述】:

我有以下瑞士法郎:

    <head>
    # load js
    <script>
    function graph() 
     swfobject.embedSWF(
     "open-flash-chart.swf", "chart", "400", "180", "9.0.0", "expressInstall.swf",
     "data-file":"% url monitor-graph %");
        ;
    </script></head>

<div id="chart"> </div>
<script>
graph();
</script>

我想仅在尚未加载 swf 的情况下调用图形函数,有没有办法做到这一点?谢谢。

【问题讨论】:

【参考方案1】:

embedSWF 的最后一个参数是嵌入 swf 时调用的回调函数。它接收一个带有几个属性的事件对象,这些属性表示成功/失败等。更多关于这方面的信息,请访问swfobjectdocumentation。

swfobject.embedSWF(
 "open-flash-chart.swf", "chart", "400", "180", "9.0.0", "expressInstall.swf",
 "data-file":"% url monitor-graph %", , , 
   function(e) 
     if(e.success) graph();
   
 );

【讨论】:

投了反对票 - 看起来这并不总是正确的。既然是,文档告诉我们最后一个参数是负载处理程序。但如果找不到文件,它不会返回 true。这是您提供的链接中的引述 - 注意:如果所需的最低 Flash 播放器可用并且已创建 SWF 的 Flash 插件 DOM 元素,则成功报告为 true。 SWFObject 无法检测 swf 文件请求是否已实际加载。 这是部分解决方案。 pipwerks 的答案是正确的。【参考方案2】:

仅当成功创建 DOM 元素时,swfobject 回调才会返回成功。它实际上并没有说明 SWF 是否已加载。

来自 swfobject 文档:

注意:如果所需的最低 Flash 播放器可用并且 SWF 的 Flash 插件 DOM 元素已创建,则成功报告为 true。 SWFObject 无法检测 swf 文件请求是否已实际加载。

【讨论】:

【参考方案3】:

使用 SWFObject 嵌入 SWF,然后使用回调函数轮询 SWF 的 PercentLoaded 值。

如果值为 0,则 SWF 尚未加载。当它达到 100 时,SWF 已完全加载。

这是tutorial for polling PercentLoaded,附有代码示例。

【讨论】:

这是正确且完整的解决方案。即使超过一年,也应该这样标记。 试过了,但收到“未捕获的 ReferenceError: e is not defined”错误。 e 在函数中定义为var callbackfn = function(e) if(e.success)

以上是关于如何检查是不是使用带有 swfobject 的 JavaScript 加载了 swf?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript SWFObject:带有浏览器滚动条的全屏闪烁

如何自定义使用 SWFobject 实现的播放器?

如何在 swfobject.embedSWF 中使用 flashvars 属性?

CSS 菜单仅在 IE (SWFObject) 中隐藏在 flash 后面

用 SWFObject 代替常规嵌入真的很重要吗?

如何防止 Javascript 菜单隐藏在 Flash 视频 (SWFObject) 下