Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   определить из какого окна пришло postmessage (https://javascript.ru/forum/misc/41865-opredelit-iz-kakogo-okna-prishlo-postmessage.html)

_axl 02.10.2013 13:41

определить из какого окна пришло postmessage
 
Если на странице несколько iframe, как кроссбраузерно определить какое из них отправило сообщение?

Deff 02.10.2013 13:58

_axl,
Передать вместе с сообщением имя окна(фрейма)

shaltay 02.10.2013 14:38

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

_axl 02.10.2013 17:27

Цитата:

Сообщение от Deff (Сообщение 274686)
_axl,
Передать вместе с сообщением имя окна(фрейма)

как iframe может узнать свой id?

shaltay 02.10.2013 17:48

<iframe id="abc" name="abc" src="/frame.html" onload="FrameManager.registerFrame(this)"></iframe>


var FrameManager = {

    registerFrame : function(frame){

        pm({
          target: window.frames[frame.id],
          type:   "register", 
          data:   {id:frame.id},
          url: frame.contentWindow.location
        });

        pm.bind(frame.id, function(data) {
             console.log(data)
        });        
    }
};

BETEPAH 03.10.2013 00:24

Цитата:

Сообщение от _axl
как iframe может узнать свой id?

var iframes = parent.document.getElementsByTagName('iframe');
for (var i = 0; i < iframes.length; i++) {
if (iframes[i].contentWindow == window) alert(iframes[i].id);
}

_axl 03.10.2013 06:40

Цитата:

Сообщение от BETEPAH (Сообщение 274817)
var iframes = parent.document.getElementsByTagName('iframe');
for (var i = 0; i < iframes.length; i++) {
if (iframes[i].contentWindow == window) alert(iframes[i].id);
}

для кроссдоменных iframe не будет работать

shaltay 03.10.2013 10:25

Цитата:

Сообщение от _axl (Сообщение 274832)
для кроссдоменных iframe не будет работать

c postmessage будет. Покажется невероятным, но он будет работать даже если он https, а родитель http

Deff 03.10.2013 13:05

_axl,
Цитата:

Сообщение от _axl
как iframe может узнать свой id?

Не Id a window.name
для этого каждому фрейму нужно прописать name
Можно прописать name идентичное ID
Цитата:

<iframe id="iframe000" name="iframe000" src="ссылка"></iframe>
<iframe id="iframe001" name="iframe001" src="ссылка"></iframe>
...
Во фрейме считываем window.name

_axl 03.10.2013 15:32

Цитата:

Сообщение от shaltay (Сообщение 274853)
c postmessage будет. Покажется невероятным, но он будет работать даже если он https, а родитель http

не понял, как здесь можно использовать postmessage?
а если вставлять в обычный iframe ссылку на документ с этим кодом, то работать не будет, я проверил

Не Id a window.name
для этого каждому фрейму нужно прописать name
Можно прописать name идентичное ID
Цитата:
<iframe id="iframe000" name="iframe000" src="ссылка"></iframe>
<iframe id="iframe001" name="iframe001" src="ссылка"></iframe>
...
Во фрейме считываем window.name

действительно работает, жаль что я весь день потратил чтобы свой велосипед написать


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