Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2013, 13:41
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

определить из какого окна пришло postmessage
Если на странице несколько iframe, как кроссбраузерно определить какое из них отправило сообщение?
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2013, 13:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

_axl,
Передать вместе с сообщением имя окна(фрейма)
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2013, 14:38
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

А если у меня фрейм подгрузил новую страницу или обновил старую, как быть? Postmessage дважды получает данные. Не знаю, как избавиться от этого.
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2013, 17:27
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

Сообщение от Deff Посмотреть сообщение
_axl,
Передать вместе с сообщением имя окна(фрейма)
как iframe может узнать свой id?
Ответить с цитированием
  #5 (permalink)  
Старый 02.10.2013, 17:48
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

<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)
        });        
    }
};
Ответить с цитированием
  #6 (permalink)  
Старый 03.10.2013, 00:24
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от _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);
}
Ответить с цитированием
  #7 (permalink)  
Старый 03.10.2013, 06:40
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

Сообщение от BETEPAH Посмотреть сообщение
var iframes = parent.document.getElementsByTagName('iframe');
for (var i = 0; i < iframes.length; i++) {
if (iframes[i].contentWindow == window) alert(iframes[i].id);
}
для кроссдоменных iframe не будет работать
Ответить с цитированием
  #8 (permalink)  
Старый 03.10.2013, 10:25
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Сообщение от _axl Посмотреть сообщение
для кроссдоменных iframe не будет работать
c postmessage будет. Покажется невероятным, но он будет работать даже если он https, а родитель http
Ответить с цитированием
  #9 (permalink)  
Старый 03.10.2013, 13:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

_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

Последний раз редактировалось Deff, 03.10.2013 в 13:22.
Ответить с цитированием
  #10 (permalink)  
Старый 03.10.2013, 15:32
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

Сообщение от shaltay Посмотреть сообщение
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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что блок скрылся за нижней границей окна? foreach jQuery 12 15.02.2013 20:19
Определить из какого элемента массива была вызвана функция BorodinKO Общие вопросы Javascript 2 31.03.2012 12:20
Как определить максимальный рамер окна браузера shtopor Javascript под браузер 2 30.12.2011 21:25
Как определить какого типа данные в строке den9000 Общие вопросы Javascript 7 07.12.2010 10:57
как определить позицию элемента относительно окна scuter Events/DOM/Window 5 07.05.2008 18:47