Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2012, 19:29
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

opera window.postMessage
есть скрипт, вроде этого
var a={
    ctor:function(){
        a.target=document.getElementById('frame').contentWindow;
        a.send(1);
    },
    target:null,
    send:function(b){
        a.target.postMessage(a,'http://domain2.com')
    }
}
window.load=a.ctor();

send не посылает сообщение на указанный домен, который есть на странице . никаких ошибок нет, вообще ни чего. но вот если перед a.target.postMessage(a,'http://domain2.com') вызвать alert() то всё отлично работает и сообщение отправляется. alert не важно какой. хоть пустой.. что это за баг такой? это наблюдается как в opera так и firefox
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2012, 21:35
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Фрейм загрузиться, видимо, не успевает.
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2012, 21:43
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

Сообщение от Kolyaj Посмотреть сообщение
Фрейм загрузиться, видимо, не успевает.
да, скорее всего это причина. а как проверить перед отправкой, готов ли фрейм? сразу приходит мысль, повесить на фрейм обработчик onload который установит флаг готовности. а перед отправкой запустить вечный цикл который будет завершатся если флаг установлен. если это быдлокод, посоветуйте решение получше..

неее.. вечный цикл это я поспешил.. практически вешает оперу

upd: в общем поставил проверку, если флаг установлен отправляем, если нет через setTimeout вызываем себя же через секунду. вроде работает..

Последний раз редактировалось trololo, 20.03.2012 в 22:04.
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2012, 21:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

JavaScript однопоточный, поэтому вечный цикл не позволит исполнится чему-либо ещё.

Нужно ловить load у фрейма, да.

Сообщение от trololo
window.load=a.ctor();
Это, кстати, не установка события, а просто вызов a.ctor().
Ответить с цитированием
  #5 (permalink)  
Старый 20.03.2012, 22:06
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

Сообщение от Kolyaj Посмотреть сообщение
JavaScript однопоточный, поэтому вечный цикл не позволит исполнится чему-либо ещё.

Нужно ловить load у фрейма, да.


Это, кстати, не установка события, а просто вызов a.ctor().
но вызов происходит после загрузки окна, верно? а если да, то чем это хуже addEventListener?
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2012, 22:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Нет, вызов происходит в момент присваивания. Вы же вызываете ctor.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
XHR && HTTP 403 status code && Opera Ex_Soft Opera, Safari и др. 9 05.01.2011 16:44
Как в opera узнать, что popup заблокирован? Kirrr Общие вопросы Javascript 0 06.08.2010 21:00
Opera отдаёт неправильный код функциональных клавиш. NT Man Opera, Safari и др. 1 19.01.2010 02:45
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56