【问题标题】:Stop all audio inside iframes from parent从父级停止 iframe 内的所有音频
【发布时间】:2017-05-02 18:50:06
【问题描述】:

我有一个 index.html,其中包含多个 iframe。启动 index.html 时,我将不同的 html 页面加载到每个 iframe 中。每个 html 页面内部都有多个音频标签。我使用 index.html 在 iframe 之间导航。

是否可以在索引中设置一个停止所有音频的功能?当我想在当前一个 iframe 完成播放音频之前“跳转”到另一个 iframe 时,我遇到了音频相互叠加的问题。我知道如何从 iframe 访问父索引文件,但是如何定位索引中的所有 iframe 并停止音频标签?我无休止地搜索,但没有找到解决方案。

这是我试图开始工作的函数,但它似乎只捕获索引中的音频标签,而不是 iframe 中的那些。

function audioClear(){
    var sounds = window.document.getElementsByTagName('audio');
    for(i=0; i<sounds.length; i++) sounds[i].pause();
};

任何指导将不胜感激。我对音频工作还很陌生,所以我正在尽力而为。

【问题讨论】:

  • 在框架页面内运行该代码,或迭代 frames 集合。您可以将该代码移动到框架页面的 onunload 事件中,以使其在框架导航离开时运行。
  • 可以发一下html吗?
  • 感谢@dandavis 的建议,我想循环浏览 iframe,但不知道如何定位它们。
  • @doutriforce 很抱歉我没有发布 html,但这是我公司的代码,由于版权问题,我无法发布。但基本上我只有一个包含几个 iframe 的索引,然后有导航代码“翻转”通过 iframe。但是当从一个到下一个时,我可以听到前一个“页面”的音频,因为 iframe 没有被卸载。因此,让这个函数循环播放和暂停所有音频效果很好。
  • @layerburn,没有汗水!很高兴您的问题得到解决。

标签: javascript jquery html audio iframe


【解决方案1】:

应该这样做。
它应该迭代所有帧以找到音频。
试试看。

var frames = window.frames;
for (var i = 0; i < frames.length; i++) { 
  var sounds = frames[i].document.getElementsByTagName('audio');
  for(j=0; j<sounds.length; j++){
    sounds[j].pause();
  }
}

【讨论】:

  • 这非常有效!现在我看到它抓取的不仅仅是单个音频标签,我无法在没有音频相互踩踏的情况下在不同的 iframe 之间跳转。 window.frames 是我缺少的部分,非常感谢您的帮助!我知道一定有办法找到它们。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多