Javascript:iFrame中的事件

时间:2011-02-06 16:53:24

标签: javascript events iframe

我正在构建一个WYISWYG编辑器,其中iframe位于designMode = 'on'

问题是我无法在Firefox和Opera中使用iframe上的任何事件(IE未经测试),例如我想跟踪onkeyup事件:

document.getElementById("myFrame").onkeyup = function(){
    doSomething...
}

但在父窗口中不起作用。

我也尝试了iframe:

top.frames[0].onkeyup = function(){
        doSomething...
}

和所有类似的东西:

top.document.frames[0].onkeyup
top.frames["myFrame"].onkeyup
top.frames[0].document.onkeyup

但他们都不想工作,所以最后证明即使window.onclick不起作用,所以现在我有点困惑......

这是什么解决方案?

修改

问题似乎出现在iframe中的document.designMode = "on"

1 个答案:

答案 0 :(得分:8)

我建议在iframe Document上捕捉该事件,而在Firefox中至少需要使用addEventListener()而不是onkeyup来执行此操作。以下内容适用于所有主流浏览器:

var iframe = document.getElementById("myFrame");
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

function handleIframeKeyUp(evt) {
    alert("Key up!");
}

if (typeof iframeDoc.addEventListener != "undefined") {
    iframeDoc.addEventListener("keyup", handleIframeKeyUp, false);
} else if (typeof iframeDoc.attachEvent != "undefined") {
    iframeDoc.attachEvent("onkeyup", handleIframeKeyUp);
}