我正在挑战当前的框架。我使用的是swfobject ver 2.2。
这是我的剧本:
<script type="text/javascript">
function flashplayer(flashname) {
var flashvars = {};
var params = {};
params.play = "true";
params.menu = "true";
params.scale = "noscale";
params.allowfullscreen = "true";
var attributes = {
id: "flashDiv",
name: "flashDiv"
};
swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", flashvars, params, attributes);
var obj = swfobject.getObjectById("myAlternativeContent");
totalFrames = obj.totalFrames;
$('#duration').html(totalFrames);
currentFrame1 = obj.currentFrame;
$('#current').html(currentFrame1);
obj.addEventListener("onStateChange", "onytplayerStateChange");
}
function onStateChange() {
var obj = swfobject.getObjectById("myAlternativeContent");
currentFrame1 = obj.TcurrentFrame;
$('#current').html(currentFrame1);
}
function stopflash() {
var obj = swfobject.getObjectById("myAlternativeContent");
obj.Stop();
}
function PlayFlash() {
var obj = swfobject.getObjectById("myAlternativeContent");
obj.Play();
}
function FlashRewind() {
var obj = swfobject.getObjectById("myAlternativeContent");
obj.Rewind();
}
</script>
<div id="duration">
1
</div>
<div id="current">
1
</div>
<input onclick="flashplayer('../../Video/test.swf');" type="button" style="width: 300px"
value="play flash" /><br />
提前致谢。
答案 0 :(得分:1)
快速浏览一下,我发现您的代码存在三个问题。
通过在属性对象中指定ID和名称,您将为新创建的<object>
分配名称。这意味着swfobject.getObjectById("myAlternativeContent")
无效,因为您已将<object>
重命名为“flashDiv”。您应该使用swfobject.getObjectById("flashDiv")
代替。
您尝试在swfobject.getObjectById
之后立即使用swfobject.embedSWF
。但是,这可能不起作用,因为在调用swfobject.getObjectById
之前可能无法完成嵌入。 (顺便说一句,getObjectById
仅用于静态发布;使用动态发布时,可以使用标准getElementById
)
您没有指定express install参数,因此您的SWFObject语法无效。请改用:
swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes);
#1和#2的解决方案是使用SWFObject的callback
功能。这有助于计时,确保在嵌入成功之前不会调用DOM函数。它还提供了对嵌入式<object>
的引用,使您可以避免进行swfobject.getObjectById
调用。
function flashplayer(flashname) {
var flashvars = {};
var params = {};
params.play = "true";
params.menu = "true";
params.scale = "noscale";
params.allowfullscreen = "true";
var attributes = {
id: "flashDiv",
name: "flashDiv"
};
function mycallback(event){
var obj = event.ref;
totalFrames = obj.totalFrames;
$('#duration').html(totalFrames);
currentFrame1 = obj.currentFrame;
$('#current').html(currentFrame1);
obj.addEventListener("onStateChange", "onytplayerStateChange");
}
swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes, mycallback);
}
请记住,您可能仍会遇到计时问题;只要<object>
嵌入页面中,就会调用SWFObject的回调 - 这并不意味着SWF已完成加载。
您可以通过检查Flash Player的PercentLoaded
方法以及JavaScript setInterval
来检查SWF的加载状态。
var obj = event.ref;
if(obj.PercentLoaded() === 100){
//do stuff
} else {
//Use setInterval to check PercentLoaded again
}