如何使用JQuery将点击事件添加到iframe

我在页面上有一个iframe,来自第三方(广告)。 当点击iframe(logging一些内部统计信息)时,我想触发点击事件。 就像是:

$('#iframe_id').click(function() { //run function that records clicks }); 

基于HTML的:

 <iframe id="iframe_id" src="http://something.com"></iframe> 

我似乎无法得到任何变化的工作。 思考?

iframe没有“onclick”事件,但您可以尝试捕获iframe中文档的click事件:

 document.getElementById("iframe_id").contentWindow.document.body.onclick = function() { alert("iframe clicked"); } 

编辑虽然这不能解决您的跨站点问题,FYI的jQuery已经更新,以与iFrames打好:

 $('#iframe_id').on('click', function(event) { }); 

2015年1月更新 iframe解释的链接已被删除,因为它不再可用。

注意如果iframe来自不同于主机页面的域,上面的代码将不起作用。 你仍然可以尝试使用评论中提到的黑客。

尝试使用: iframeTracker jQuery插件 ,如下所示:

 jQuery(document).ready(function($){ $('.iframe_wrap iframe').iframeTracker({ blurCallback: function(){ // Do something when iframe is clicked (like firing an XHR request) } }); }); 

我试图find更独立的更好的答案,所以我开始考虑JQuery如何执行事件和自定义事件。 由于点击(从JQuery)只是任何事件,我认为我所要做的就是触发事件,因为iframe的内容已被点击。 因此,这是我的解决scheme

 $(document).ready(function () { $("iframe").each(function () { //Using closures to capture each one var iframe = $(this); iframe.on("load", function () { //Make sure it is fully loaded iframe.contents().click(function (event) { iframe.trigger("click"); }); }); iframe.click(function () { //Handle what you need it to do }); }); }); 

看到这个:

 var iframe = $('#your_iframe').contents(); iframe.find('your_clicable_item').click(function(event){ console.log('work fine'); }); 

没有任何build议的答案为我工作。 我用下面的方法解决了类似的情况:

 <a href="http://my-target-url.com" id="iframe-wrapper"></a> <iframe id="iframe_id" src="http://something.com" allowtrancparency="yes" frameborder="o"></iframe> 

CSS (当然精确定位应根据应用程序的要求而改变):

 #iframe-wrapper, iframe#iframe_id { width: 162px; border: none; height: 21px; position: absolute; top: 3px; left: 398px; } #alerts-wrapper { z-index: 1000; } 

当然现在你可以捕获iframe包装上的任何事件。

您可以使用此代码绑定点击iframe中的元素。

 jQuery('.class_in_iframe',jQuery('[id="id_of_iframe"]')[0].contentWindow.document.body).on('click',function(){ console.log("triggered !!") }); 

解决scheme,为我工作:

 var editorInstance = CKEDITOR.instances[this.editorId]; editorInstance.on('focus', function(e) { console.log("tadaaa"); }); 

对于使用Primefaces(使用CLEditor)的ppl,这可能会很有趣:

 document.getElementById('form:somecontainer:editor') .getElementsByTagName('iframe')[0].contentWindow .document.onclick = function(){//do something} 

我基本上只是从Traveling Tech Guy那里得到了答案,并改变了一下select;