Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2009, 13:00
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

onload на iframe срабатывает дважды
Стоит задача — менять баннеры по AJAX-переходу (таргетируем баннеры по разным разделам на сайте).
C сервера дергаем вот такую ручку, передавая ей кодовое имя баннера (верхний/боковой) и URL.
function reloadBanner(which, url)
    {
        var div = document.createElement('div');

        div.style.position = 'absolute';
        div.style.top = '-10000px';
        div = document.body.appendChild(div);
        
        div.innerHTML = banners[which].template;
        var iframe = div.firstChild; 
        iframe.ondblclick = function() {return which};
        
        function frmLoad (evt) {
            var which = this.ondblclick()
            var olddiv = $(banners[which].selector)[0];

            olddiv.replaceChild(this, olddiv.firstChild)
        }

        iframe.addEventListener('load', frmLoad, false)
        iframe.src = url;
    }


Функция frmLoad вызывается дважды.
Помогите, что делать, кто виноват?

Сразу скажу: пробовал делать return false и iframe.addEventListener('load', frmLoad, true). eventPhase в обоих случаях одинаковый.

По поводу кроссбраузерности будем думать потом
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2009, 13:31
Новичок на форуме
Отправить личное сообщение для palermo Посмотреть профиль Найти все сообщения от palermo
 
Регистрация: 20.08.2009
Сообщений: 4

и чем закончилось?
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2009, 15:20
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Внутри frmLoad алертните-ка evt.srcElement, все должно встать на свои места.
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2009, 17:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,234

Сообщение от hogart
Функция frmLoad вызывается дважды.
зря. это не единственная браузеро-зависимая проблема которая встанет сейчас перед вами
данная проблема наблюдается только в опере
суть в том, что при динамическом создании iframe-а в опере onload возникает сперва на загрузку пустого доркумента(url=about:blank), а потом столько на загрузку указанного
/*
 * вот сам недавно написал, кроссбразуерный вариант(это только кусок лругого кода, поэтому переменные вынесены в глобальную область)
*/
var handler=function()
	{
	if(iframe_obj.contentWindow.location.href!='about:blank')
		{
		var elem=document.getElementById(elemId);
		elem.innerHTML=iframe_obj.contentWindow.document.body.innerHTML;
		iframe_obj.parentNode.parentNode.removeChild(iframe_obj.parentNode);
		}
	}
var iframe_obj=div_elem.getElementsByTagName('iframe')[0];
if (iframe_obj.addEventListener)
	iframe_obj.addEventListener('load', handler, false);
else if (iframe_obj.attachEvent)
	iframe_obj.attachEvent('onload', handler);
else
	iframe_obj.onload=handler;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery + iframe Fidel jQuery 6 12.10.2013 22:43
как можно создать iframe со скриптами GOll Общие вопросы Javascript 2 05.05.2009 10:32
установка позиции курсора или выделения в iframe mister_maxim Events/DOM/Window 5 18.04.2009 09:43
Событие OnLoad у iframe в IE milk3dfx Events/DOM/Window 2 16.02.2009 21:09
Изменение высоты iframe HelpeR Events/DOM/Window 4 22.10.2008 00:24