如何检查是不是使用带有 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 时调用的回调函数。它接收一个带有几个属性的事件对象,这些属性表示成功/失败等。更多关于这方面的信息,请访问swfobject
documentation。
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 插件 这是部分解决方案。 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.embedSWF 中使用 flashvars 属性?