Запуск события jQuery из iframe
Здесь сценарий, у меня есть события, происходящие из iframe, и до сих пор все работает хорошо. Я просто столкнулся с проблемой, когда хочу отправить событие из iframe в родительский.
Я использую это для запуска события из iframe:
$('body', window.parent.document).trigger('eventName');
//and I've also tried
$(window.parent.document).find('body').trigger('eventName');
И затем на родительской странице я слушал событие, подобное этому:
$('body').bind('eventName', myFunction)
Я знаю, что script получает триггер, потому что я застрял console.log
до и после триггера. Iframe находится в одном домене, поэтому там нет проблем.
Я могу вызвать функцию на родительской странице так: window.parent.functionName
, но мне было интересно, можно ли это использовать с использованием решения на основе событий.
решаемые
@cwolves отвечает отлично:
parent.$('body').trigger( 'eventName' );
Ответы
Ответ 1
Если у вас есть jQuery, загруженный в родительский фрейм, попробуйте:
parent.$('body').trigger( 'eventName' );
Если нет, попробуйте это, я не уверен, что это сработает, но я просто посмотрел на источник jQuery и думаю, что он может:
var pBody = $( parent.document.body );
pBody.trigger( 'eventName', pBody.data() );
(И выполняйте то же самое при привязке eventName
)
Проблема, насколько я могу судить, заключается в том, что jQuery использует данные с локальной страницы, что вызывает проблемы, потому что похоже, что она пытается загрузить данные из другого фрейма. Другими словами, это беспорядок, но есть data
params, принятые в .bind
, .trigger
и т.д.
Ответ 2
Попробуйте это в коде iframe js
var parentWin = $( window.parent.document.body );
jQuery.event.trigger('eventName', parentWin.data(), parentWin );
Ответ 3
Итак, это будет код, который живет в вашем iFrame:
$('#myElem').click(function() {
window.parent.success_msg();
});
И этот код должен находиться в родительском окне:
window.success_msg = function() {
// Your code goes here
};
Вам также нужно запускать это на сервере, будь то localhost или хостинг.