Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: onload не работает - почему?
 
 автор: slamor   (11.05.2006 в 07:57)   письмо автору
 
 

... в общем уже крыша едет. Может кто сможет объяснить как в IE назначить событие onload у елемента iframe в JavaScript (не в теге HTML)?
В опере и фаерфоксе хоть они и по разному и реагируют, но срабатывает. В IE перепробывал всё, что смог - НИКАК. Стандартный путь idFrm2.onload=... не даёт результатов (не стандартные тоже). Подскажите пожалуйста. Вот код для тестов:


<html>
<body>
<iframe id="idFrm1" name='nameFrm1' src="frame11.html"></iframe>
<iframe id="idFrm2" name='nameFrm2' src="frame22.html" onload="alert('OLD idFrm2.onLoad')"></iframe>

<script>
    var eFrm1 = document.getElementById("idFrm1")
    var eFrm2 = document.getElementById("idFrm2")
    window.name = 'nameWindow'
    window.onload = function(){ alert('window.onload') }

    function alertOut(){
        var out = ''
        out+='\r\n window.onload = '+window.onload
        out+='\r\n idFrm1.onload = '+idFrm1.onload
        out+='\r\n idFrm2.onload = '+idFrm2.onload

        out+='\r\n\r\n window.name = '+window.name
        out+='\r\n eFrm1.contentWindow.name = '+eFrm1.contentWindow.name
        out+='\r\n eFrm2.contentWindow.name = '+eFrm2.contentWindow.name
        out+='\r\n eFrm2.contentWindow.window.name = '+eFrm2.contentWindow.window.name

        out+='\r\n\r\n idFrm2.onload = '+idFrm2.onload
        out+='\r\n eFrm2.contentWindow.onload = ' + eFrm2.contentWindow.onload
        out+='\r\n eFrm2.contentWindow.window.onload = ' + eFrm2.contentWindow.window.onload

        alert(out)
    }

    alertOut()
        eFrm1.src = 'frame1_11.html'
        eFrm2.src = 'frame2_11.html'
        idFrm1.onload = function(){ alert('NEW idFrm1.onLoad') }
        idFrm2.onload = function(){ alert('NEW idFrm2.onLoad') }
    alertOut()

</script>
</body></html>


Кто-нибудь может объяснить почему:
в место alert('NEW idFrm2.onLoad') срабатывает alert('OLD idFrm2.onLoad')
alert('NEW idFrm1.onLoad') - для idFrm1 событие вообще не срабатывает
А ещё лучше - как тогда в IE для iframe событиие onload присвоить (в JavaScript)?

Спасибо.

   
 
 автор: coloboc66   (11.05.2006 в 16:21)   письмо автору
 
   для: slamor   (11.05.2006 в 07:57)
 

А в документе фрейма нельзя установить window.onload? Или этот документ чужой?

   
 
 автор: 12345   (11.05.2006 в 16:59)   письмо автору
 
   для: coloboc66   (11.05.2006 в 16:21)
 

В iframe не пишется onload - только в body, img. Или window.onload , (объект_рисунка).onload в скрипте.

   
 
 автор: coloboc66   (11.05.2006 в 17:04)   письмо автору
 
   для: 12345   (11.05.2006 в 16:59)
 

Так я и говорю: "Если во фрейм загружается html-файл собственного изготовления, то можно в body этого файла установить onload".

   
 
 автор: slamor   (11.05.2006 в 21:11)   письмо автору
 
   для: coloboc66   (11.05.2006 в 17:04)
 

Нет. Внутри загружаемого файла событий нет - они цузие и я их подгружаю, их много и они разные :)

Задача была корректно отработать событие по окончании их загрузки, но при этом иметь возможность переключать функцию onload

Кстати "начинаю верить" :), что
"В iframe не пишется onload - только в body, img. Или window.onload"
это действительно так, но только для ИЕ - в Опере и Фаерфоксе
iframe.onload и window.onload - это разные события (в тесте срабатывают оба события)
А вот для ИЕ iframe.onload === window.onload (срабатывает только одно событие)
Вот, тест:


<html><body>
<iframe id="idFrm1" name='nameFrm1' src="frame11.html"></iframe>
<div id=idTest></div>
<script>
    var eFrm1 = document.getElementById("idFrm1")
    window.onload = function(){ idTest.innerHTML += 'window.onload<br>' }

    function writeOut(){
        var out = '<br>'
        out+='<br> window.onload = '+window.onload
        out+='<br> idFrm1.onload = '+idFrm1.onload
        out+='<br> eFrm1.onload = '+eFrm1.onload
        idTest.innerHTML += out
    }

    writeOut()
        eFrm1.onload = function(){ alert('NEW eFrm1.onLoad') }
    writeOut()
        idFrm1.onload = function(){ alert('NEW idFrm1.onLoad') }
    writeOut()
        eFrm1.src = 'frame1_11.html'
</script>
</body></html>


Он выдаёт:


window.onload = function(){ idTest.innerHTML += 'window.onload
' }
idFrm1.onload = null
eFrm1.onload = function(){ idTest.innerHTML += 'window.onload
' }

window.onload = function(){ alert('NEW eFrm1.onLoad') }
idFrm1.onload = null
eFrm1.onload = function(){ alert('NEW eFrm1.onLoad') }

window.onload = function(){ alert('NEW eFrm1.onLoad') }
idFrm1.onload = function(){ alert('NEW idFrm1.onLoad') }
eFrm1.onload = function(){ alert('NEW eFrm1.onLoad') }


Ну в общем это то с чем я столкнулся - здесь видно, что есть одно и тоже, а что нет.

В любом случае спасибо :)

   
 
 автор: Бог Зайцев   (11.05.2006 в 17:34)   письмо автору
 
   для: slamor   (11.05.2006 в 07:57)
 

Дам тебе код для IE, на примере одного из фремов, думаю с остальными разберешься )



<html> 
<body> 
<iframe id="idFrm1" name='nameFrm1' src="http://localhost/pp/runscript.php?from=forum&jsdebug=on&date=20060511173243&url=temp/20060511173243.php&infopanel=on"></iframe>
<script> 
  

function hi()
{
alert('Привет! -)')
}
if (idFrm1.addEventListener) idFrm1.addEventListener("load",hi,false);
else if (idFrm1.attachEvent) idFrm1.attachEvent("onload", hi);



</script> 
</body></html>

   
 
 автор: Бог Зайцев   (11.05.2006 в 17:41)   письмо автору
 
   для: slamor   (11.05.2006 в 07:57)
 

На случай, если соберешься еще биться с IE, почитай вот это:
http://program.rin.ru/cgi-bin/print.pl?id=1015&p=0

   
 
 автор: slamor   (11.05.2006 в 20:55)   письмо автору
 
   для: Бог Зайцев   (11.05.2006 в 17:41)
 

Спасибо, за ответы :-)
Как говорится: рад всех видеть в добром здравии.

Ссылка отличная - это как раз та инфа, что мне не хватало
И пример жизненный - теперь буду этими двумя функциями пользоваться.

В Опере и Фаерфоксе срабатывает: idFrm1.addEventListener("load",hi,false);
а в ИЕ срабатывает: idFrm1.attachEvent("onload", hi);
причём всё работает и с DOM, т.е. везде eFrm1 вместо idFrm1

при этом остаётся:
window.onload = null
idFrm1.onload = null
eFrm1.onload = null
eFrm1.contentWindow.onload = null

В общем хорошо, что Вы есть. Здорово помогли. Спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования