addEventListener срабатывает при загрузке страницы

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

<script>
$(document).ready(function(){
    $("#closer").click(function () {
        $("body").css('overflow','auto');
        $(".overlay").hide("fast");
    });

    window.addEventListener("message", function(event) {
        $("body").css('overflow','hidden');
        $(".overlay").show("fast");
        console.log("Hello from " + event.data);
    });
});
</script>

Это код из дочернего iframe:

<script>
$(function() {

    $(".standard").click(do_stuff);

    function do_stuff(){
        parent.postMessage("child frame", "*");
    }
});
</script>

Я добавил журнал консоли, чтобы попытаться отследить его работу.


person LManer311    schedule 19.04.2015    source источник
comment
Вы уверены, что ребенок говорит .click(do_stuff), а не .click(do_stuff())? Дополнительные скобки вызовут эту проблему.   -  person Barmar    schedule 19.04.2015
comment
Вызывается ли postMessage() где-либо еще на родительской странице или в любых других фреймах на странице?   -  person Benjamin Ray    schedule 19.04.2015
comment
@BenjaminRay добавил оповещение на дочерний iframe и родительскую страницу, а оповещение, которое я добавил на родительскую страницу, срабатывало при загрузке страницы, а не оповещение на странице дочернего iframe. Так что это определенно происходит, когда загружается главная страница.   -  person LManer311    schedule 19.04.2015
comment
@ Бармар, да, это так же, как ты видишь это в ребенке.   -  person LManer311    schedule 19.04.2015
comment
Получает ли он сообщение child frame или какое-то другое сообщение?   -  person Barmar    schedule 19.04.2015
comment
@Barmar Все работает правильно, но я не хочу, чтобы он срабатывал при загрузке страницы. Я хочу, чтобы он срабатывал только при переходе по ссылке в дочернем iframe. Поможет ли просмотр сайта?   -  person LManer311    schedule 19.04.2015
comment
Это ответ на мой вопрос? Я пытаюсь выяснить, является ли это отправителем или слушателем, который работает преждевременно.   -  person Barmar    schedule 19.04.2015
comment
Добавьте точку останова debugger; к do_stuff, чтобы поймать его при запуске.   -  person Barmar    schedule 19.04.2015
comment
@Barmar Это прослушиватель запускается преждевременно.   -  person LManer311    schedule 19.04.2015
comment
Что происходит в event.data, когда это происходит?   -  person Barmar    schedule 19.04.2015
comment
@Barmar Привет от {widgetId:widget_1429412705363,method:ready,value:null}   -  person LManer311    schedule 19.04.2015
comment
Я подозреваю, что расширение браузера отправляет это. Попробуйте отключить расширения и посмотрите, исчезнет ли оно.   -  person Barmar    schedule 19.04.2015
comment
Отключил расширение, то же самое.   -  person LManer311    schedule 19.04.2015


Ответы (1)


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

Скрипт родительской страницы

<script>
function open_post() {
        $("body").css('overflow','hidden');
        $(".overlay").show("fast");
        console.log("Hello from " + e.data);
}
</script>

Сценарий дочернего iframe:

<script>
$(function() {
    $(".standard").click(parent.open_post);
});
</script>

Работал как шарм и не срабатывал при загрузке родительской страницы.

person LManer311    schedule 19.04.2015