Dream4ever / Knowledge-Base

record every requirement and solution here
https://www.hewei.in/
36 stars 6 forks source link

Vue click 事件绑定函数中播放音频的代码失效 #153

Closed Dream4ever closed 3 years ago

Dream4ever commented 3 years ago

解决过程

在用 Vue.js 开发 Web 页面的过程中,发现 click 事件绑定的函数中,有一行代码 document.querySelector('#answer-right').play() 在 iOS 下报错 DOMException

但是这行代码之前在 PC 和 Android 和 iOS 上都是没有问题的,可现在在 iOS 上就会报上面的错误。

因为这段代码是在 node.addEventListener('webkitAnimationEnd', someFunc)someFunc 函数里的,最开始以为是函数定义方式有问题,可检查代码发现函数就是用的最常规的定义方式 function someFunc() { ... },那就不是这里的问题。

后来又在想,是不是执行到这行代码的时候,对应的 DOM 节点还不存在,于是又把代码放到 this.$nextTick(() => { }) 的回调函数体中,发现还是有同样的问题。

最后实在没招了,继续观察代码,发现报错的这行代码是可以从 node.addEventListener('webkitAnimationEnd', someFunc)someFunc 函数里移出来的,并不会影响运行结果,于是尝试了一下,竟然解决问题了!

真是纳闷,虽然解决问题了,但还是不知道问题出在哪里,先记下来再说吧。