Приоритет выполнения onload в IE 6

12 3
[Удален]
1773

У меня проблема, с которой я никогда не сталкивался. На странице стоит


window.onload=func();

func() определена во внешнем файле. Все браузеры работают как надо, а вот любимый MSIE 6

вызывает эту функцию раньше, чем загрузится внешний файл javascript, и выдает ошибку "Требуется объект". Причем это происходит только при переходе на страницу, если её обновить - все работает нормально.

Как перехватить этот момент чтобы не было ошибки? Вариант засунуть func() в тело страницы отпадает, т.к. она использует Prototype, а он уж точно будет лежать во внешнем файле.

[Удален]
#1

$(document).ready(function(){

$('teg').func({});

}

или не так понял ))

T.R.O.N
На сайте с 18.05.2004
Offline
314
#2

neolord,

я делаю так.

<script>

var pics = new Image();

pics.src='aaa.js'; (кешируем файл скрипта)

function aaa(){} (делаем заглушку)

</script>

<script src='aaa.js'></script> (теперь загружаем файло с этой функцией)

Дополнительно, а файле aaa.js а самом конце переопределяем какую-то глобальную переменную. Это и будет сигналом о загрузке.

onload не использую никогда, ибо есть ситуации когда это событие просто не наступает.

На счет IE и прочего. У IE - приоритет загрузки, у Opera и Safari - собственного кеша. FF - никогда не интересовал, посему - незнаю.

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
[Удален]
#3
KosoyRoman:
$(document).ready(function(){
$('teg').func({});
}

или не так понял ))

Не так =) Фишка в том что в IE6 и вот это не сработает, потому что он, сцуко, вообще не грузит яваскрипт при первом переходе на страницу - я это только что заметил, поставив дебаггер. Обновляешь - грузит.

T.R.O.N:
neolord,
я делаю так.
<script>
var pics = new Image();
pics.src='aaa.js'; (кешируем файл скрипта)
function aaa(){} (делаем заглушку)
</script>
<script src='aaa.js'></script> (теперь загружаем файло с этой функцией)

Дополнительно, а файле aaa.js а самом конце переопределяем какую-то глобальную переменную. Это и будет сигналом о загрузке.

onload не использую никогда, ибо есть ситуации когда это событие просто не наступает.

На счет IE и прочего. У IE - приоритет загрузки, у Opera и Safari - собственного кеша. FF - никогда не интересовал, посему - незнаю.

Это что-то глубокое и непостижимое для меня. Зачем эта функция aaa нужна?

И фишка то как выяснилось не в Onload, а в том что он вообще не хочет грузить скрипт.

Возможно дело в том, что у меня весь js собирается скриптом в один файл и чистится, для уменьшения потока данных - стоит <script src='/js/'> Но это увы неизлечимо по многим причинам.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#4
neolord:
Зачем эта функция aaa нужна?

это имя функции, совпадающее с тем, которое будет загружено в файле. Пока файл не загружен, функия, пусть и нудевая, существует. А значит - не возникает криической ошибки.

T.R.O.N добавил 25.05.2009 в 17:40

neolord:
в том что он вообще не хочет грузить скрипт.

для этого я и ставлю кеширование.

[Удален]
#5

Вы не поверите, но не помогло.

Не помогли даже танцы с бубном вроде динамической подгрузки с гет-параметром.

"/js/?"+Math.floor(Math.random*10000)

Но - обновляешь, и все работает.

При этом принудительное обновление через Try/Catch, через conditional comments, через alert или document.write не решает проблемы. Я просто в шоке.

Меня жутко бесит этот IE.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#6

neolord, а пробовали посмотреть снифером. Когда какие запросы и ответы проходят?

T.R.O.N добавил 25.05.2009 в 17:58

neolord:
Меня жутко бесит этот IE.

OFF Фрузу сняли прямо с языка, тока по отношению к лисе.. Заимела она. Все нормауль везде работает, а ее колбасит

[Удален]
#7

С фоксом у меня почему то никогда проблем нет.

Запросы получаются такие:

Вошел первый раз на страницу (сразу на ту где нужен скрипт) - все сработало и все запросы были.

перешел на другую - запрос ушел только на /js/ - картинки и стили видимо закешировались.

Вернулся на ту - опять запрос ушел только на /js/ но ничего не сработало. Код ответа 200, контент верный. Однако дебаггер опять уверяет что функция $ ему незнакома, как и все остальное.

Сейчас попробую засунуть в js принудительное кеширование

T.R.O.N
На сайте с 18.05.2004
Offline
314
#8

neolord,

Маленький вопрос, а не используете ли Вы случаем прототип или гквери? Если да - проверяйте кодировки в ответах сервера.

neolord:
что функция $ ему незнаком

. Попробуйте нормально эту фунцию вызвать перед </body>.

[Удален]
#9

использую прототип, да. я вроде писал выше.

Я эту функцию пытаюсь после загрузки страницы вызвать.

но перед body тоже не работает =)

Насильное кеширование тоже не помогло. Моя фантазия уже кончилась.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#10
neolord:
Моя фантазия уже кончилась.

вывод, выкинуть на... прототип (как и другую подобную гадость)

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий