2013-10-14 196 views
1

音频文件不能在Safari玩.. 它给出了一个错误类型错误:未定义”不是一个函数(评估 'myAudio.play()')”

TypeError: 'undefined' is not a function (evaluating 'myAudio.play()') 

这是我的HTML代码。

<audio> 
    <source src="audio/horse.ogg" type="audio/ogg"> 
    <source src="audio/horse.mp3" type="audio/mpeg"> 
    Your browser does not support the audio element. 
</audio>  

这是我的JavaScript代码

myAudio = document.getElementsByTagName('audio')[0]; 
if (typeof myAudio.loop == 'boolean'){ 
    myAudio.loop = true; 
} 
else{ 
    myAudio.addEventListener('ended', function() { 
    this.currentTime = 0; 
    this.play(); 
    }, false); 
} 
myAudio.play(); 

我只有一个音频标签在HTML中。

+0

看起来像你在事件中使用'this'。它不同于函数声明之外。尝试做'自己=这个';'只是在外面引用'self.play()'而不是this.play()。我不喜欢那个音频对象。它是否将“this”放入事件数据中?重新读你的意图,而不是纯粹的代码。你想重新启动。使用“myAudio.play()”而不是“this.play()”? –

+0

看来** document.getElementsByTagName('audio')[0] **返回null。您的Javascript是在HTML代码上面定义的吗?它需要在HTML下方才能找到音频元素。 – levi

+0

此代码正在Chorme,Opera,Firefox,Konquer中工作.... –

回答

0

我在我的Windows PC上有类似的问题。因此,为了测试,我创建了一个简单的HTML文件,其中包含一个红色的大点,然后单击它来播放音频。它适用于所有兼容HTML5的浏览器,除了Safari浏览器。我花了整整一天的时间,尝试了100多种不同的解决方案,让它在safari上运行,但没有运气。

最后,我安装了QuickTime(最新版本),它解决了50%的问题。

其余50%的问题是代码结构。

<audio id="audio1" src="audio/guestProfile.ogg" type="audio/ogg" ></audio> 
<audio id="audio1" src="audio/guestProfile.mp3" type="audio/mpeg" ></audio> 

它不喜欢上面的代码。因此,我不得不将其更改为以下:

<audio id="audio1"> 
    <source src="audio/guestProfile.ogg" type="audio/ogg"> 
    <source src="audio/guestProfile.mp3" type="audio/mpeg"> 
    Your browser does not support the audio tag. 
</audio> 

这可能不是纯&完美的解决方案。但它为我工作。

0

它将永远不能在Windows Safari上工作,因为上次的Safari for Windows在2010年发布。这就是为什么HTML5:<audio><video>标签在Windows Safari中无法使用的原因。 Test yourself

相关问题