如何使用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;