Триггерные события в родительском окне iframe

18

Почему следующее не работает:

//iframe:
window.parent.$(document).trigger('complete');

//parent window:
$(document).bind('complete', function(){
  alert('Complete');
});

, пока работает следующая работа:

//iframe:
window.parent.$('body').trigger('complete');

//parent window:
$('body').bind('complete', function(){
  alert('Complete');
});

?

    
задан Vincent 05.01.2011 в 07:15
источник
  • Возможный дубликат события запуска триггера в родительском окне iframe –  Mark Schultheiss 11.05.2016 в 19:09

3 ответа

36

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

попробовать

window.parent.$(window.parent.document).trigger('complete');
    
ответ дан HackedByChinese 05.01.2011 в 07:22
источник
  • У меня, по сути, такая же проблема с YUI3, какие-нибудь советы? –  danjah 05.02.2011 в 08:15
  • @ Danjah Я никогда раньше не использовал YUI, поэтому я не уверен, что смогу помочь. Однако вполне возможно, что аналогичный подход можно использовать: window.parent.YUI.use ('node-event-simulate', function (Y) {Y.one (window.parent.document) .simulate ('click ');}); Тем не менее, вы можете просто захотеть выставить метод для родителя, чтобы выполнить требуемый запуск от имени вашего предложения iframe, ala @ Ken Redler. –  HackedByChinese 05.02.2011 в 12:14
  • Хорошо, очень спасибо - я определенно дам это bash, я был немного осторожен, чтобы начать имитировать события, прежде чем пытаться вызвать существующих обработчиков ... но мне, возможно, придется. –  danjah 05.02.2011 в 22:50
  • +1 Именно то, что мне нужно! Я хотел вызвать событие изменения размера родительского окна из моего iframe. –  ggzone 05.01.2016 в 15:25
  • Я хотел бы конкретно указать (потому что мне понадобилось секунду, чтобы получить его), что проблема была конкретно в том, что документ относится к window.document, то есть к документу iframe. Чтобы получить документ родительского окна, вам нужно - как этот ответ, ссылаться на него как на window.parent.document. –  Hutch Moore 26.05.2016 в 21:24
10

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

// In Parent
function triggerComplete () {
  $(document).trigger('complete');
}

// In iFrame
window.parent.triggerComplete();
    
ответ дан Ken Redler 05.01.2011 в 07:28
источник
-5

проверить это решение, очень сложный

top.frames ['frame_name']. document.getElementById ('Обработка'). style.display = 'none';     

ответ дан Alexander Todorov 31.01.2011 в 16:29
источник