我在github上回答了類似的問題。這是我的解決方案:
這會在初始化mediaElement播放器後過早調用setSrc方法時發生。由於閃回回退,在成功事件被觸發之前,swf(以及其api方法)將不可用。之後,setSrc在IE8中工作正常..
我不想在成功處理程序中設置初始源。因此我使用了一個布爾變量來檢查成功事件是否發生。在我的源代碼設置方法中,每當布爾變量var等於false時,我檢查它的值並使用遞歸(使用setTimeout來防止矯枉過正)。對我來說有詭計了。
//create the tag
var video = $("<video>",{id:"videoElement",width:640,height:360}).appendTo('body');//jquery
var mediaElementInitialized = true
//create the mediaelement
var mediaElement = new MediaElementPlayer("#videoElement",{
/**
* YOU MUST SET THE TYPE WHEN NO SRC IS PROVIDED AT INITIALISATION
* (This one is not very well documented.. If one leaves the type out, the success event will never fire!!)
**/
type: ["video/mp4"],
features: ['playpause','progress','current','duration','tracks','volume'],
//more options here..
success: function(mediaElement, domObject){
mediaElementInitialized = true;
},
error: function(e){alert(e);}
}
);
var setSource = function(src){
if(mediaElementInitialized == true){
if(mediaElement){
mediaElement.setSrc(src);
mediaElement.play();
}
} else {
//recursive.. ie8/flashplayer fallback fix..
var self = this;
setTimeout(function(){
self.setSource(src);
},100);
}
}
更新:我找到了解決辦法,雖然它不是沒有它的錯誤,它似乎工作得相當好。請參閱我在mediaelement的github問題中發佈的以下討論的評論:https://github.com/johndyer/mediaelement/issues/246 – vrbl
任何人都可以在此方面獲得明確的解決方案? – Gluip
沒有得到上面的錯誤,但不得不在'setSrc()'之前調用'pause()',那麼一切爲我工作 – schellmax