|
|
|
| ... в общем уже крыша едет. Может кто сможет объяснить как в 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)?
Спасибо. | |
|
|
|
|
|
|
|
для: slamor
(11.05.2006 в 07:57)
| | А в документе фрейма нельзя установить window.onload? Или этот документ чужой? | |
|
|
|
|
|
|
|
для: coloboc66
(11.05.2006 в 16:21)
| | В iframe не пишется onload - только в body, img. Или window.onload , (объект_рисунка).onload в скрипте. | |
|
|
|
|
|
|
|
для: 12345
(11.05.2006 в 16:59)
| | Так я и говорю: "Если во фрейм загружается html-файл собственного изготовления, то можно в body этого файла установить onload". | |
|
|
|
|
|
|
|
для: 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') }
|
Ну в общем это то с чем я столкнулся - здесь видно, что есть одно и тоже, а что нет.
В любом случае спасибо :) | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: slamor
(11.05.2006 в 07:57)
| | На случай, если соберешься еще биться с IE, почитай вот это:
http://program.rin.ru/cgi-bin/print.pl?id=1015&p=0 | |
|
|
|
|
|
|
|
для: Бог Зайцев
(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
В общем хорошо, что Вы есть. Здорово помогли. Спасибо. | |
|
|
|