Подтвердить что ты не робот

Запуск события 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' );
4b9b3361

Ответ 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 или хостинг.