Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передача события в iframe (https://javascript.ru/forum/events/45563-peredacha-sobytiya-v-iframe.html)

empirik 05.03.2014 20:45

Передача события в iframe
 
Я пытаюсь расположить блок поверх iframe, чтобы тот реагировал на действия пользователя и перенаправлял события в iframe, расположенный под ним.
Это выглядит примерно так:
<html>
<head>
<style type="text/css">
#hideme{
    background: #000;
    z-index: 100;
    position: absolute;
    opacity: 0.0;
}
iframe{
    position: absolute;
    top: 100px;
    left: 350px;
}
</style>
</head>
<body>
<iframe width="853" height="480" src="//www.youtube.com/embed/9bZkp7q19f0" frameborder="0" allowfullscreen></iframe>
<div id="hideme"></div>

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
    $('iframe').load(function(){
        var iframe = $(this);

        var hideme = $('#hideme');
        hideme.width(iframe.width());
        hideme.height(iframe.height());
        hideme.css('left', iframe.position().left);
        hideme.css('top', iframe.position().top);
        
        hideme.on("click", function(event){
            iframe.trigger(event);
        });
    });
</script>
</body>
</html>

Очевидно, с помощью trigger я не могу "отправить" событие айфрейму. Может кто-нибудь пояснить, почему это не работает, и вообще, возможно ли это.

Deff 06.03.2014 02:22

empirik,
Если фрейм на ином домене, нежели главная страница, и у Вас нет возможности установки изначально своих скриптов на домене фрейма - то никак

krasovsky 06.03.2014 08:40

iframe - это элемент текущего документа, клик происходи по нему. В iframe существует "свой мир", то есть свой документ.
Так вот надо обратиться к документу во фрейме:
window.frames[0].document

И вот ему уже отправляй свои события

empirik 14.03.2014 10:52

В конечном счете, как я понял, действительно нет возможности обращаться к айфрейму, если он расположен на другом домене.
А что если спрятать блок #hideme и вызвать событие повторно? Я попробовал вот так, но что-то не получается.
hideme.on("click", function(event){
            $(this).hide();
            $(document).trigger('click', event);
        });


Часовой пояс GMT +3, время: 00:10.