【问题标题】:Creating a "Push-to-mute" button创建“一键静音”按钮
【发布时间】:2021-05-29 02:52:54
【问题描述】:

我在<iframe> 内的页面上有一个<video> 对象。我基本上想要一个“按下静音”按钮,它会在单击按钮时使视频静音,然后在松开按钮后立即取消静音。最终项目将嵌入一个我还没有访问权限的页面,但它将是一个仅带有<video> 标记的页面。我插入了一个示例视频,该视频在页面上也有一个<video> 标签来开发它。

我的 HTML 看起来像这样,有一个按钮,当鼠标按下时会触发一个功能,当鼠标重新抬起时会触发另一个功能。

<button onmousedown="mute()" onmouseup="unmute()">MUTE</button>

<iframe id="video_iframe" src="https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4" allowfullscreen width="100%" height="100%" frameborder=0 style="border:none;"></iframe>

现在我的 Javascript 看起来像这样:

  function mute(){
var video = document.getElementById('video_iframe').contentWindow.document.getElementsByTagName()('video')[0];
video.muted = true;
}

function unmute(){
var video = document.getElementById('video_iframe').contentWindow.document.getElementsByTagName()('video')[0];
video.muted = false;
}

我认为我必须使用“getElementsByTagName”,因为最终在 iFrame 中的内容将是一个页面,该页面的标签的 Id 会发生变化。我正在尝试控制该 iFramed 页面中的第一个(也是唯一一个)视频,所以我想通过标签名称获取元素将是去那里的方法。

我不知道为什么这目前不起作用,因此感谢您的帮助!

【问题讨论】:

  • 出于(非常好的)安全原因,这些天您无法在任何现代服务器设置上直接与 iframe 对话,因此至少您希望将其更改为“on touchstart/mousedown ,postMessage iframe 的“静音”指令”和“在 touchend/mouseup 上,postMessage 向 iframe 的“取消静音”指令”。如果 iframe 中的文档不是“你的”。那么这是你真正无法做到的事情:如果你不拥有 iframe,你就无法访问它的内容。

标签: javascript html iframe getelementsbytagname


【解决方案1】:

使用 iframe 会返回跨域错误,因为 chrome 等浏览器不允许您直接更改 iframe 的内容,除非视频和 HTML 页面位于同一个网址上。

我可以建议你两种方法:

  1. 在你的机器上下载页面,然后&lt;iframe&gt;它。

  2. 如果您删除 iframe 并直接使用 &lt;video&gt;,那么它也可以在您的机器上正常工作。

     <script language="javascript">
    
     function mute(){
     var video = document.getElementById('at');
     video.muted = true;
     }
    
     function unmute(){
     var video = document.getElementById('at');
     video.muted = false;
     }
     </script>
     <button onmousedown="mute()" onmouseup="unmute()">MUTE</button>
    
     <video id="at" src="https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4" allowfullscreen width="100%" height="100%" frameborder=0 style="border:none;">
    

【讨论】:

  • 让我们在答案中使用现代 HTML5,即使问题使用了古老的代码 =) &lt;script&gt; 是针对 JS 的,除非您明确将 type="..." 用于不同的内容类型。 language 不是,也从来不是一个有效的属性。没有onmousedown(我们没有使用HTML4.1),用getElement[...] 函数或querySelector 找到JS 端的按钮,并以正确的方式添加事件监听器。最后:由于 CSP,现代服务器几乎肯定会禁止直接访问 iframe,因此您想改为编写 postMessage 代码。
  • 感谢 Mike,我一定会更新代码。我有一段时间没有像这样编码了,所以先用我知道的东西来工作吧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多