只是一个简单的问题。
我想为变量分配一个 HTMLMediaElement
方法。
// html part
<video id="player" ... />
// js part
const video = document.querySelector('#player')
const play = video.play
video.play() // works!
play() // error!
Uncaught (in promise) TypeError: Failed to execute 'play' on 'HTMLMediaElement': Illegal invocation
有谁知道为什么会发生这个错误?
最佳答案
HTMLMediaElement.play
的原生 DOM 实现需要将 this
绑定(bind)到 HTMLMediaElement
。video.play()
有效,因为 this
值绑定(bind)到 video
。play()
不起作用,因为 this
值现在绑定(bind)到其他东西(也许是 window
?)。
您可以使用以下方法调用它:
const video = document.querySelector('#video');
play = video.play;
play.call(video);
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>
或使用绑定(bind)“保存以备后用”:
const video = document.querySelector('#video');
play = video.play.bind(video);
play();
<video id="video" src="http://vjs.zencdn.net/v/oceans.mp4" controls>
关于javascript - 类型错误 : Failed to execute 'play' on 'HTMLMediaElement' : Illegal invocation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44110000/