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