小编Joe*_*zel的帖子

iOS Safari - 延迟播放媒体元素(通过点击) - NotAllowedError

iOS Safari 需要触摸事件来播放/暂停媒体元素。没有的话,你会得到:

NotAllowedError:当前上下文中的用户代理或平台不允许该请求,可能是因为用户拒绝了权限。捕获 PromiseReaction 错误消息。

问题是“如何延迟 <MediaElement>.play() 调用而不丢失触摸事件上下文?”

我试图在点击后延迟播放媒体元素,但在我提出的两种方法(Promise 和 setTimeout)中,它们都失去了与触摸事件的连接,并且由于以下原因我收到了 NotAllowedError 错误<MediaElement>.play() 调用的范围更改。正如预期的那样,两者都适用于除 iOS Safari 之外的所有 ES6 设备/浏览器。

请随意在codepen 上使用它。

const delay = ms => new Promise(res => setTimeout(res, ms));

const video = document.querySelector('video'),
      button = document.querySelector('button')

const playVideoSyncDelay = async e => {
  document.body.classList.add('blackground')
  await delay(3000)
  video.play()
    .then( e => video.onended = e => document.body.classList.remove('blackground', 'playing') )
    .then( e => document.body.classList.add('playing') )
    .catch( e => console.error('Oops:', e) )
}

const playVideoTimeoutDelay = e => {
  document.body.classList.add('blackground') …
Run Code Online (Sandbox Code Playgroud)

html javascript safari mediaelement ios

7
推荐指数
1
解决办法
1062
查看次数

标签 统计

html ×1

ios ×1

javascript ×1

mediaelement ×1

safari ×1