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:&lt;audio&gt;&lt;video&gt; 标签在 Windows Safari 中不起作用的原因。 Test yourself

【讨论】:

以上是关于TypeError:未定义'不是函数(评估'myAudio.play()')“的主要内容,如果未能解决你的问题,请参考以下文章

反应本机路由器通量:TypeError:未定义不是函数(评估'addListener')

TypeError:未定义不是对象(评估'this.setState')[重复]

TypeError:未定义不是对象(评估'_ref.state)

TypeError:未定义不是对象(评估'array.length')反应原生[关闭]

TypeError:未定义不是一个对象(评估'details.date.getTime')

TypeError:未定义不是一个对象(评估'_app.firebase.apps')