Могут ли события, запущенные из iframe, обрабатываться элементами в родительском?
Предположим, что у меня есть страница, расположенная в www.example.com/foo
, и она содержит <iframe>
с src="http://www.example.com/bar"
. Я хочу, чтобы можно было запустить событие из /bar
, и его можно услышать /foo
. Используя библиотеку Prototype, я пробовал сделать следующее без успеха:
Element.fire(parent, 'ns: frob');
Когда я это делаю, в Firefox 3.5 я получаю следующую ошибку:
Node не может использоваться в документе, отличном от того, в котором он был создан "code:" 4 Строка 0
Не уверен, что это связано с моей проблемой. Есть ли какой-либо механизм безопасности, который предотвращает запуск сценариев в /bar
событий в /foo
?
Ответы
Ответ 1
Я еще не тестировал этот кросс-браузер, но он работает в FF.
В iFrame вы можете запустить элемент parent.document:
Event.observe(window, 'load', function() {
parent.document.fire('custom:event');
});
а в родительском фрейме вы можете поймать его:
document.observe('custom:event', function(event) { alert('gotcha'); });
Ответ 2
События могут обрабатываться функцией, определяемой родительским окном, если iframe
является страницей из того же домена (см. статью MDC на Одинаковая политика происхождения); однако события не будут пузыряться от iframe
до родительской страницы (по крайней мере, не в моих тестах).
Ответ 3
а затем поймать событие на главной странице, вы можете поймать событие в iframe и вызвать функцию на главной странице.
<-- main page -->
function catchIt()
{
// code here
}
<-- iframe page -->
function doIt()
{
top.catchIt();
}
<a onclick="doIt();">test</a>
Я думаю, что это сработает, но не проверит его