TypeError:未定义'不是函数(评估'myAudio.play()')“
Posted
技术标签:
【中文标题】TypeError:未定义\'不是函数(评估\'myAudio.play()\')“【英文标题】:TypeError: undefined' is not a function (evaluating 'myAudio.play()')"TypeError:未定义'不是函数(评估'myAudio.play()')“ 【发布时间】:2013-10-14 18:21:27 【问题描述】:音频文件无法在 Safari 中播放.. 它给出了一个错误。
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 中只有一个音频标签。
【问题讨论】:
看起来您在活动中使用了“this”。它与函数声明之外的不同。尝试做'self = this;'就在外面并引用'self.play()'而不是this.play()。我不知道音频对象那么好。是否应该将“this”放入事件数据中?重读你的意图而不是纯代码。你想重新开始。使用“myAudio.play()”而不是“this.play()”? 似乎 document.getElementsByTagName('audio')[0] 正在返回 null。您的 Javascript 是否在 HTML 代码之上定义?它需要位于您的 HTML 下方才能找到音频元素。 此代码在 Chorme、Opera、Firefox、Konquer 中运行...... @levi nope,它返回对象。 也许更多信息:***.com/questions/12804028/… 【参考方案1】:我在我的 Windows 电脑上遇到了类似的问题。
为了进行测试,我创建了一个带有一个红色大点的简单 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>
这可能不是一个整洁而完美的解决方案。但它对我有用。
【讨论】:
【参考方案2】:它永远不会在 Windows Safari 上运行,因为最后一个 Safari for Windows 是在 2010 年发布的。这就是为什么 HTML5:<audio>
或 <video>
标签在 Windows Safari 中不起作用的原因。 Test yourself
【讨论】:
以上是关于TypeError:未定义'不是函数(评估'myAudio.play()')“的主要内容,如果未能解决你的问题,请参考以下文章
反应本机路由器通量:TypeError:未定义不是函数(评估'addListener')
TypeError:未定义不是对象(评估'this.setState')[重复]
TypeError:未定义不是对象(评估'_ref.state)
TypeError:未定义不是对象(评估'array.length')反应原生[关闭]