/ / Как да получите IFRAME, за да слушате същите събития като родител (и да стреляте с едни и същи манипулатори) - javascript, iframe, prototypejs, слушател на събития

Как да получите IFRAME, за да слушате същите събития като родител (и да стреляте със същите работодатели) - javascript, iframe, prototypejs, слушател на събития

Имам HTML страница (родител) с вграден IFRAME. Родителската страница има няколко слушатели на събития за събития от мишката и клавиатурата, както е показано по-долу (аз използвам библиотеката Prototype).

var IdleMonitor = Class.create({

active: null,
initialize: function(ii) {
Element.observe(window, "mousemove", this.sendActiveSignal.bind(this));
},

sendActiveSignal: function() {
console.log("MOUSE");
}
});

var idleMonitor = new IdleMonitor();

IFRAME, като отделен документ и всичко останало, не отговаря на събитията на родителя. Така че аз създадох някакъв код в IFRAME като:

<script type="text/javascript" >

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

});
</script>

Но това ми дава грешка (sendActiveSignalе неопределена функция). Как да направя IFRAME също така да слушам за същите събития и да изстрелям манипулатори на събития на родителите, за предпочитане в прототип-y?

Отговори:

2 за отговор № 1

На първо място, аз наистина мисля, че трябва да използвате bindAsEventListener, когато обвързвате функции като слушатели на събития. По този начин имате достъп до аргументите на събитието. Може да се наложи по-късно.

Във вашия случай първото нещо, което забелязах, е товавашият sendActiveSignal е обявен за член на вашия клас IdleMonitor. Двигателят на JS няма да го намери, ако го наричате само от parent.sendActiveSignal, тъй като предполагам, че родителят не е икона на IdleMonitor. (И не е, мога да кажа точно сега:])

Във вътрешността на вашата рамка трябва да имате достъп до променливата idleMonitor и можете да направите това, като я посочите по следния начин:

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

Това почти трябва да работи, не мога да го тествам точно сега.


0 за отговор № 2

Оказва се, че е много по-лесно да имате достъп до детската вградена рамка от родителя, използвайки свойството contentDocument на елемента iframe, напр.

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

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