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 добави предупреждение за дъщерната вградена рамка и родителската страница, а предупреждението, което добавих към родителската страница, се задейства при зареждане на страницата, а не предупреждението на дъщерната вградена рамка. Така че определено се случва, когато главната страница се зарежда.   -  person LManer311    schedule 19.04.2015
comment
@Barmar да, точно както го виждаш в детето   -  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