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, время: 08:59. |