下面是三个场景:

  • document.adoptNode ,
  • document.importNode
  • document.createElement +分配 Prop 。

  • 在每种情况下,视频都会自动播放,即使它没有附加到 DOM。这与 <script> 元素的行为不一致,该元素在附加到 DOM 之前不会评估/下载。

    视频应该自动播放吗?

    https://gist.run/?id=cb657718c3b6b34c043b34f3356d5a84

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>GistRun</title>
    </head>
    <body>
      <template>
        <video src="http://video.webmfiles.org/big-buck-bunny_trailer.webm"
               loop controls autoplay>
        </video>
      </template>
      <script>
        let template = document.querySelector('template');
    
        // SCENARIO 1: (causes autoplay)
        document.adoptNode(template.content);
    
        // SCENARIO 2: (causes autoplay)
    //    document.importNode(template.content, true);
    
        // SCENARIO 3: (causes autoplay)
    //    let video = document.createElement('video');
    //    video.autoplay = 'autoplay';
    //    video.controls = 'controls';
    //    video.loop = 'loop';
    //    video.src = 'http://video.webmfiles.org/big-buck-bunny_trailer.webm';
      </script>
    </body>
    </html>
    

    最佳答案

    这是复制与剪切的区别。

    如果愿意的话,在adaptNode 中,您正在删除已经解释过的内容,而在importNode 中,您正在复制一个节点(即生成对其他事物的描述),然后使用该描述在dom 本身上实现它。

    那么哪种行为是正确的呢?两者都是;一个是剪辑,另一个是副本。自动播放是只发生在一个事物上,而不是一个事物的描述上。因此,无论操作提供了描述(而不是事物),该操作都不是自动播放适用的操作。

    关于javascript - 未附加到 DOM 的视频是否应该自动播放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37581912/

    10-10 18:46