使用 JQuery 将事件处理程序添加到 iframe

Posted

技术标签:

【中文标题】使用 JQuery 将事件处理程序添加到 iframe【英文标题】:Adding event handler to an iframe using JQuery 【发布时间】:2010-10-07 15:53:17 【问题描述】:

我想为 iframe 分配一个 keydown 事件处理程序。类似于纯JS的东西:

document.getElementById('iframe_id').contentWindow.addEventListener('keydown',funcName, true);

我试过了:

$(document.getElementById('iframe_id').contentWindow).keydown( function() 
   // my func
);

但它不起作用..请帮助!

【问题讨论】:

keydown event on a iframe的可能重复 【参考方案1】:

contentWindowiframewindow 对象。你想要iframedocument 代替:

$(document.getElementById('iframe_id').contentWindow.document).keydown(function() 
    // my func
);

请注意,我不确定 jQuery 如何对来自其他窗口/框架的元素做出反应。

【讨论】:

对此保持警惕。我相信这会导致相当大的内存泄漏,即使您更改其 URL,iframe 的内容仍将保留在内存中。【参考方案2】:

请记住:据我所知,如果 iframe 内容是跨域的,这将永远不会起作用。您最终会遇到权限错误:http://... 的权限被拒绝以从http://... 获取属性 htmlDocument.nodeType。浏览器将父子 dom 权限限制在同一个域中。

【讨论】:

【参考方案3】:

$函数代替了对document.getElementById的需要

$('iframe_id').contentDocument.keydown(function() 
   // logic
);

【讨论】:

【参考方案4】:

这对我有用:

$('#iframe_id').contents().keydown(function() 
    // my func
);

【讨论】:

以上是关于使用 JQuery 将事件处理程序添加到 iframe的主要内容,如果未能解决你的问题,请参考以下文章

使用on()jQuery方法将'this'作为参数传递给事件处理程序

jQuery 事件方法

如何将事件处理程序绑定到 jQuery 中的实例?

jQuery 事件方法

jQuery 事件方法

jquery常见用法