На первый взгляд, я вижу три проблемы с вашим кодом.
Указывая идентификатор и имя в вашем объекте атрибутов, вы присваиваете имя только что созданному <object>
. Это означает, что swfobject.getObjectById("myAlternativeContent")
не будет работать, потому что вы переименовали <object>
в "flashDiv". Вы должны использовать swfobject.getObjectById("flashDiv")
вместо.
Вы пытаетесь использовать swfobject.getObjectById
сразу после swfobject.embedSWF
. Однако это, вероятно, не сработает, потому что встраивание может быть не завершено до вызова swfobject.getObjectById
. (Кстати, getObjectById
требуется только для статической публикации; при использовании динамической публикации можно использовать стандарт getElementById
)
Вы не указываете параметр экспресс-установки, поэтому ваш синтаксис SWFObject недействителен. Используйте это вместо:
.
swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes);
.
Решением для № 1 и № 2 является использование функции callback
SWFObject. Это помогает с синхронизацией, гарантируя, что вы не будете вызывать ваши функции 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);
}
Имейте в виду, что вы все еще можете столкнуться с проблемами времени; Обратный вызов SWFObject вызывается, как только на страницу встраивается <object>
- это не означает, что SWF завершил загрузку.
Вы можете проверить состояние загрузки SWF-файла, проверив метод Flash Player PercentLoaded
в сочетании с JavaScript setInterval
.
var obj = event.ref;
if(obj.PercentLoaded() === 100){
//do stuff
} else {
//Use setInterval to check PercentLoaded again
}