這裏有一個簡單的JavaScript程序:桌面瀏覽器和移動Safari瀏覽器的封閉處理方式有所不同?
var $d = {};
var AudioPlayer = function(filename, timeUpdateCallback, playbackDone){
// An HTML5 audio player is defined here.
}
$d.AudioPlayer = AudioPlayer;
var AudioManager = function(chapterId){
var audioPlayer;
var me=this;
this.next = function(){
...
}
function playSegment(){
// var path='/test.mp3';
$d.utils.log('Path is: '+path+'');
audioPlayer = new $d.AudioPlayer(path, function(p){} ,
function(){
me.next();
}
);
audioPlayer.play();
}
}
當播放完成回調被稱爲在桌面瀏覽器(Safari/Firefox)的一切工作正常。但是,當在iPhone Safari中使用完全相同的JavaScript時,我看到一個異常「找不到變量我」。
爲什麼封閉處理的方式有所不同?無論如何要解決這個問題嗎?
更新:我沒有提及audioPlayer依賴於PhoneGap的媒體類;在回調中不接受收盤。問題在於回調以本地代碼的形式存儲爲字符串,所以當它返回時,引用不再存在。 對於我實際使用的桌面瀏覽器和HTML5音頻標籤,所以我沒有發現這個問題。
你在哪裏創建一個AudioManager的實例?什麼調用內部函數'playSegment()'? – 2010-09-08 15:16:59