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 в обоих случаях одинаковый. По поводу кроссбраузерности будем думать потом:) |
и чем закончилось?
|
Внутри frmLoad алертните-ка evt.srcElement, все должно встать на свои места.
|
Цитата:
данная проблема наблюдается только в опере суть в том, что при динамическом создании 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;
|
| Часовой пояс GMT +3, время: 10:25. |