Вход

Просмотр полной версии : Как отследить onload в iframe в ie8


platedz
03.06.2013, 22:12
Например это
document.getElementsByTagName("iframe")[0].onclick = function()
{
alert("sdf");
}
Работает во всех браузерах, кроме ie8. Точнее и в ie8 работате, но после отправки формы, связь теряется.
А как сделать так, чтобы и в Ie8 можно было отследить перезагрузку. Подскажите, пожалуйста.

Deff
03.06.2013, 22:15
.onclick
Дык onclick или onload ?
2. Лучше с фреймами работать по имени

platedz
03.06.2013, 22:35
Описка, он onload.
По имени то же самое.
frames.myframe.onload= function(){ console.log("111"); }
и так
frames[0].onload = function(){ console.log("111"); }

Т.е. событие работает, но только в момент загрузки фрейма, а после перезагрузки, т.е. после отправки формы, уже перестает работать. в ie9 опере хроме файфоксе, но нормально, проблема только в Ie8

Deff
03.06.2013, 22:43
platedz,
Пробуйте повесить на тег
<iframe src="http://javascript.ru/forum/" width=100% height="1700" onload="frameLoad(this)"></iframe>
<script>
function frameLoad(frame) {
alert("Загрузилось")
}
</script>

platedz
03.06.2013, 23:05
Большое спасибо, так вышло. Если еще объясните, почему предыдущие примеры не работали, то будет совсем здорово.

platedz
10.06.2013, 23:32
Думаю, что ответ скорее всего будет отрицательным, но тем не менее.
Возможно ли как-то отследить статус ответа iframe?

Deff
11.06.2013, 00:20
Возможно ли как-то отследить статус ответа iframe?
Если фрейм с того же домена - достаточно легко вставить внутрь фрейма скрипт - сообщающей внешней функции на основной странице об успешной загрузке...
Ошибка будет при превышении ожидания времени ответа данной функции после события оnload...

Может быть проще загружать контент фрейма Аяксом(при ссылке с того же домена) и не мучать фреймы ? и считывать статус ?

platedz
11.06.2013, 01:30
Дело в том, что нужно отловить не успешную загрузку, а например 502 ошибку, или любую другую ошибку сервера. В общем нужно узнать, что статус отличается от 200. Соответственно, если он не 200, то и скрипт в ответе передать не выйдет
С ajax конечно, проще, но в ie8 передать файл через него не получится.

Deff
11.06.2013, 02:33
В общем нужно узнать, что статус отличается от 200. Соответственно, если он не 200, то и скрипт в ответе передать не выйдет
С ajax конечно, проще, но в ie8 передать файл через него не получится.
http://learn.javascript.ru/ajax-xmlhttprequest

platedz
11.06.2013, 02:47
Это XMLHttpRequest, а у мне нужно узнать статус iframe

zilker
11.06.2013, 16:49
Не получите вы в фрейме статус, используйте для этого ajax, вам же уже написали. И с чего это вы решили, что в ie8 не получится? В 7м получается, если сильно нужно.

platedz
11.06.2013, 17:59
Потому что единственные известные мне способы отправки файла через ajax - это либо преобразование его в data:url, либо использование FormData, которые не поддерживаются id<10. Поэтому когда сильно нужно используется или фрэйм, или флеш

Deff
11.06.2013, 18:18
platedz,
Никто не мешает использовать аякс и фрейм одновременно - получать статус по Аяксу, а через фрейм дожидаться подгрузки... конечно это не 100% вероятность совпадения,
И второе, - по онлоад, вы можете прочесть контент фрейма и анализировать статус 200 или иной - по содержимому,
а отсутствие загрузки фрейма - по таймированию оnload,
устанавливая таймер одновременно с установкой/срабатыванием очередного оnload

Deff
11.06.2013, 18:35
или флеш
http://habrahabr.ru/post/132489/

platedz
11.06.2013, 22:50
Спасибо за ответы. Просто статус ответа проще анализировать. Если он пришел, и если он не 200, то можно что-то делать. А сам сервер может выдать любую ошибку, это надо каждую анализировать. А Ajax и фрейм все-таки разные ответы дадут. Т.е. Ajax может пройти нормально, а фрейм выдаст ошибку

Deff
12.06.2013, 03:20
а фрейм выдаст ошибку
Вы не показываете полную задачу, - поэтому советы экстрасенсорные...

Ежели Вам нужен ток статус 200, достаточно пользоваться только фреймом, поскольку при этом во фрейме будет какой то определенный ответ, (к примеру какой-то типичный заголовок на странице, который можно и отслеживать при загрузке...
При других вариантах - очевидно будет ответ, который нас не устроит... далее анализ и число повторных попыток или отсутствие оных...
И ощущение, что слишком много дебатов и мало попыток, в реальности не так страшен черт, как его малюют... если конечно у Вас не запуск ядрёной бомбы