2014-02-11 5 views
3

У меня возникли проблемы с запуском настраиваемого события в iframe из родительского документа.JQuery триггерное событие в окне iframe

В детстве у меня есть такой код:

$(window).on('my-event', function() { console.log("GOT IT") }) 

В родителю я получаю IFRAME и попытаться отправить событие:

iframe = document.getElementById('content-frame') 
$(iframe.contentWindow).trigger('my-event') 

событие не приходит. Я попытался использовать «документ» вместо окна, но все равно не повезло.

Можно ли это сделать с помощью jquery?

Я надеюсь, что есть простой способ, поэтому я могу избежать написания диспетчерской функции, при которой родитель вызывает функцию в iframe и отправляет событие.

+0

ли вы найти способ сделать это? Единственный способ, которым я смог сделать подобное, - это добавить функцию для запуска пользовательского события и привязки этой функции к событию на элементе, а затем запустить событие из этого элемента, я думаю, это то, что вы имели в виду под «отправкой» ». – Popo

+0

Нет, я не нашел пути. У меня есть функция отправки в iframe, которую я вызываю из родительского окна. У меня есть функция-обертка, которая затем запускается в родительском и вызывает функцию, которая запускается в iframe. –

ответ

14

Это мое решение. В родительском вы можете запустить событие, используя следующее:

$('#content-frame')[0].contentWindow.$('body').trigger('my-event'); 

В детстве, вы можете прослушивать событие:

$('body').on('my-event', function(e) { 
    alert("Hello, World! Message received!"); 
}); 
+0

Этот ответ должен быть проверен как правильный ответ. Прекрасно подходит для меня. Мои собственные попытки всегда терпели неудачу, потому что я не добавил [0] – Garavani

+2

. Пожалуйста, поймите, что это предложение предполагает, что дочернее окно имеет jQuery ($) в глобальной области, что может не всегда быть в этом случае. – ragulka

+0

Предупреждение продолжало давать мне ошибку! когда я удалил его в другое заявление, он сработал. 'NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS: [Ошибка JavaScript:" newPrompt.init не является функцией "{file:" chrome: //browser/content/browser.js "строка: 7946}] '' – KrIsHnA

3

Просто дополнение к ответу Пита (Jquery не требуется)

var event = document.createEvent('CustomEvent'); 
event.initCustomEvent('my-event', true, true, null); 
frames['iframeId'].document.dispatchEvent(event); 

более подробная версия:

var event = document.createEvent('CustomEvent'); 
var canBubble = true; 
var cancelable = true; 
var eventdDetail = {}; 

event.initCustomEvent('myEvents:myCustomEvent', canBubble, cancelable, eventDetail); 

frames['iframeId'].document.dispatchEvent(event); 

eventDetail объект затем доступен как в обработчике события event.detail собственности

Однако это старый синтаксис, даже если поддерживается во всех браузерах. В современных браузерах рекомендуется использовать конструктор CustomEvent().

Смежные вопросы