Javascript 如何让IFRAME侦听与父级相同的事件(并触发相同的处理程序)

Javascript 如何让IFRAME侦听与父级相同的事件(并触发相同的处理程序),javascript,iframe,prototypejs,event-listener,Javascript,Iframe,Prototypejs,Event Listener,我有一个带有嵌入式IFRAME的HTML页面(父页面)。父页面有两个用于鼠标和键盘事件的事件监听器,如下所示(我正在使用Prototype库) IFRAME是一个单独的文档,不响应父级事件。因此,我在IFRAME中设置了一些代码,如: <script type="text/javascript" > Element.observe(window, "mousemove", function(p) { parent.sendActiveSign

我有一个带有嵌入式IFRAME的HTML页面(父页面)。父页面有两个用于鼠标和键盘事件的事件监听器,如下所示(我正在使用Prototype库)

IFRAME是一个单独的文档,不响应父级事件。因此,我在IFRAME中设置了一些代码,如:

<script type="text/javascript" >

        Element.observe(window, "mousemove", function(p) {
            parent.sendActiveSignal();

        });
</script>

元素。观察(窗口,“鼠标移动”,功能(p){
parent.sendActiveSignal();
});
但这给了我一个错误(sendActiveSignal是一个未定义的函数)。
如何使IFRAME也侦听相同的事件并启动父级的事件处理程序,最好是以Prototype-y方式?

首先,我认为在将函数绑定为事件侦听器时,应该使用bindAsEventListener。通过这样做,您可以访问事件的参数。你以后可能需要它

在您的例子中,我注意到的第一件事是您的sendActiveSignal被声明为IdleMonitor类的成员。如果只通过parent.sendActiveSignal调用它,JS引擎将找不到它,因为我猜parent不是IdleMonitor实例。(事实并非如此,我现在可以说:)

在iframe中,必须访问idleMonitor变量,可以通过以下方式引用它:

<script type="text/javascript">
Element.observe(window, "mousemove", function(p) { parent.document.idleMonitor.sendActiveSignal(); });
</script>

观察(窗口,“mousemove”,函数(p){parent.document.idleMonitor.sendActiveSignal();});

这应该很有效,我现在无法测试它。

结果表明,使用iframe元素的contentDocument属性从父级访问子iframe要容易得多,例如

document.observe("dom:loaded", function() {

    Element.observe($('id-of-iframe').contentDocument, "mousemove", function() {
      // call whatever...
    });
});

在BindaSeventListener()上获取的点。。。不过,感谢您,函数仍然没有定义;一定是因为它在那个类中?我回到家后会调试它,但如果您获得了正确的idleMonitor成员(不是空实例或未定义的值),问题可能在于prototype如何创建类(函数)。我已经做了一些工作之间的框架和弹出窗口,他们工作得很好。。。我必须实现一些“魔法”,使原型对象能够工作。在你关于使用contentDocument的回答中(我还没有50个代表点,所以我不能在那里发表评论),我不会使用它,因为:1。跨浏览器问题:一些IE版本处理得不太好。2.这应该在iframe文档中,如果处理父对象的观察者,事情会变得一团糟。但是嘿。。。那就是我;]
document.observe("dom:loaded", function() {

    Element.observe($('id-of-iframe').contentDocument, "mousemove", function() {
      // call whatever...
    });
});