2013-02-23 165 views
2

如何使用JQuery捕捉点击iframe的内容。我有亚马逊横幅,当用户点击iframe时我需要关闭它的容器DIV。我试过'内容',点击iframe,绑定事件,但没有任何工作。当我点击iframe时,它会在另一个选项卡上打开Amazon的页面,但点击事件不会触发。我放了一个断点并提醒以确保。iFrame点击事件未触发

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

同样,这是亚马逊的横幅iframe,它托管在亚马逊上,而不是在我的服务器上。常规上结合不工作的

例子:http://jsbin.com/oyanis/4/edit

+1

由于安全限制,这不起作用。 – Oliver 2013-02-23 02:11:01

+0

谢谢。任何其他方式捕捉点击,也许在iframe的区域根据鼠标x,y ..任何建议 – 2013-02-23 02:12:38

+0

你可以覆盖一个透明的div,但然后用户将不得不点击两次。对不起,没有方便的解决方案。 – Oliver 2013-02-23 02:14:33

回答

3

有一个巧妙的方法来对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和哥哥。

+0

正是我想要的,但现在我们无法检测到iframe中的哪个元素也被点击了吗? – Miguel 2013-07-29 19:05:56

+0

我很抱歉地说,但是,只要你能得到。这意味着你不能。这是一个浏览器安全限制! – 2013-07-31 09:50:53

+0

这是一个很好的解决方案,但只适用于Firefox。即使在我编写它的时候在chrome – aishazafar 2013-11-27 22:47:49