gpt4 book ai didi

javascript - 桌面浏览器和移动 Safari 上的关闭处理方式不同吗?

转载 作者:行者123 更新时间:2023-11-28 02:51:28 27 4
gpt4 key购买 nike

这是一个简单的 JavaScript 程序:

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的媒体类;它的回调中不接受闭包。问题在于回调在 native 代码中存储为字符串,因此当它返回时引用就消失了。对于桌面浏览器,我实际上使用的是 HTML5 音频标签,所以我没有遇到这个问题。

最佳答案

您使用的是哪个版本的 mobile safari?

我因此捕捉到了你的代码的本质:

var d = {

AudioPlayer: function (filename, timeUpdateCallback, playbackDone){
document.write ("Audioplayer<br/>");
return {
play : function () {playbackDone && playbackDone ();}
}
}
};

try {
(function AudioManager (chapterId) {
var me = this;

this.next = function (){
document.write ("AudioManager next<br/>");
}

function playSegment (){
var audioPlayer = new d.AudioPlayer ('/test.mp3', function(p){} ,
function () {
document.write ('playbackdone<br/>');
me.next ();
}
);

audioPlayer.play();
}

playSegment ();
}) ();
} catch (e) {
document.write(e);
}

它在 Chrome、iPod touch 和 iPad 上运行时不会出现错误。

关于javascript - 桌面浏览器和移动 Safari 上的关闭处理方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com