javascript - 将事件附加到包含更多 iframe 的 iframe

标签 javascript html css events iframe

我有一个编辑器在我的 window 中包含一个包装 iframe,然后在内部包含另外 2 个 iframe(<iframe> 元素内的 HTML 是通过 JS 中的 write() 插入的,而不是像这样硬编码):

<iframe class="parent">
  <div class="wrapper">
    <iframe class="editor"></iframe>
    <iframe class="previewer"></iframe>
  </div>
</iframe>

一个是编辑器,另一个是预览器。第一个包含这两个的(我们称之为 parent )有一个 eventListener for mousemove附加到它,但没有发射。如果我添加 5px border 例如,当我将鼠标移到 parent 的边框上时,事件将触发,但当我将鼠标悬停在包含编辑器 预览器的中间时(预览器为 display:none 而编辑器可见,反之亦然)。

所以,下面蓝色区域我可以mousemove ,但其余的我不能。这很可能是因为堆叠顺序,但我如何附加一个事件以在整个框架上触发?我需要 mousemove因为在 mousemove我在右下角显示一个菜单。无论编辑器或预览器是否可见,我都希望显示相同的菜单。

editor

最佳答案

无论如何都无法执行此操作,因为该事件在子 iframe 中被捕获。我的“修复”是为所有 iframe 手动设置相同的事件,例如:

// Hide and show the util bar based on mouse movements
eventableIframes = [self.previewerIframeDocument, self.editorIframeDocument];

for (i = 0; i < eventableIframes.length; i++) {
  eventableIframes[i].addEventListener('mousemove', function (e) {
    utilBarHandler(e);
  });
  eventableIframes[i].addEventListener('scroll', function (e) {
    utilBarHandler(e);
  });
  eventableIframes[i].addEventListener('keyup', function (e) {
    shortcutUpHandler(e);
  });
  eventableIframes[i].addEventListener('keydown', function (e) {
    shortcutHandler(e);
  });
}

很丑,但没办法。

关于javascript - 将事件附加到包含更多 iframe 的 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768186/

相关文章:

javascript - Google Firestore - 如何在一次往返中通过多个 ID 获取多个文档?

javascript - 是否可以使用 JavaScript/jQuery 进行 Base 36 编码?

javascript - AngularJS ng-options 在选择选项后删除了默认空白值

javascript - 更改所有 child 图像来源

html - 通过 sibling 的 child 获取选择器?

javascript - Webpack 无法在外部包中构建 ES6

html - 在 html 中组织我的文本字段

html - 如何在导航栏(菜单)元素上应用或更改颜色

html - 垂直居中行内 block 元素

列表周围的 Html/Css 边框