【问题标题】:iFrame Click event not firediFrame Click 事件未触发
【发布时间】:2013-02-23 02:09:02
【问题描述】:

如何使用 JQuery 捕获对 iframe 的点击。我有一个亚马逊横幅,当用户单击 iframe 时,我需要关闭其容器 DIV。我试过'内容',点击iframe,绑定事件但没有任何效果。当我单击 iframe 时,它​​会在另一个选项卡上打开亚马逊的页面,但单击事件永远不会触发。我设置了一个断点并发出警报只是为了确保。

我正在使用最新的 JQuery 1.9 版并在 Chrome 上对其进行了测试。我还考虑过捕获全局单击 ($(document).click) 并检查单击区域,但是当我单击 iframe 时,$(document).click 不会触发。有什么建议吗?

同样,它是一个亚马逊横幅 iframe,它托管在亚马逊而不是我的服务器上。

常规绑定不起作用的示例:http://jsbin.com/oyanis/4/edit

【问题讨论】:

  • 由于安全限制,这将不起作用。
  • 谢谢。捕获点击的任何其他方式,可能在 iframe 区域根据鼠标 x,y .. 任何建议
  • 你可以覆盖一个透明的 div,但是用户必须点击两次。抱歉,没有方便的解决方案。
  • 感谢您的宝贵时间和反馈
  • 它的工作当然是使用 activeElement 技巧。阅读我的答案。

标签: iframe jquery


【解决方案1】:

有一个巧妙的技巧可以“点击” iframe 内容。

你可以这样做:

<div id="iframeinside">
    <iframe />
</div>

现在可以在 js 中说:

 var oldActive = document.activeElement; /* getting active Element */
 var frame = $('#iframeinside iframe')[0];
 $('#iframeinside').mouseenter(function() {
      /* Setting interval to 1ms for getting eventually x,y mouse coords*/
      oldActive = document.activeElement;
      setInterval('doSomething()', 1); 
 });

 $('#iframeinside').mouseleave(function () {
      /* clear interval cause we arent over the element anymore*/
      clearInterval(intervalId); 
 });

这些间隔确实调用:

function doSomething() {
    /* if the focus has changed to the iframe */
    if(oldActive != frame && document.activeElement == frame) {
        oldActive = document.activeElement;
        alert(myQuery);
        alert('click did happen to the iframe');
    }
}

我用它做了几件事,它总是有效的。我没查的是ie6,7和哥哥们怎么样。

【讨论】:

  • 正是我想要的,但现在我们无法检测到 iframe 中的哪些元素也被点击了,可以吗?
  • 我很抱歉这么说,但这是你能做到的。这意味着你不能。那是浏览器安全限制!
  • 这是一个很好的解决方案,但仅适用于 firefox。它甚至在 chrome 中也不起作用
  • 在我写它的时候。它在所有主要浏览器中都运行良好。即使一些ie7。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
相关资源
最近更新 更多