Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   cache в IE6-7 (https://javascript.ru/forum/css-html-internet-explorer/1398-cache-v-ie6-7-a.html)

Joac 10.07.2008 17:32

cache в IE6-7
 
Ребята
Все привет.
Я столкнулся с такой проблемой что у меня не наступает событие onload в IE6-7, когда я возращаюсь на страничку кнопкой BACK или просто по ссылкам навигатции((((((
А на него у меня повешена функция - и она не запускается((((
Видимо страница кэшируется, потому как при удалении Temporary Internet Files - все работает. А иначе почему не наступает событие onload
Я пытался по всякому убить кэш:

на странице у меня стоят:
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="Mon, 04 Dec 1999 21:29:02 GMT"/>
<!--это скрипт, который у меня не вызывается-->
<script type="text/javascript" language="JavaScript" src="<%=BaseURL()%>js/banerrotate.js?<%=rnd%>"></script>


window.onload = requestdata;
document.body.onload = requestdata;
document.getElementsByTagName.onload = requestdata;


и даже в коде у меня вот что:
Код:

Response.AddHeader "Pragma", "No-Cache"
Response.CacheControl = "No-cache "
Response.ExpiresAbsolute = #October 11,2003 16:00:00#
Response.Expires = -1

и все это стоит у меня и в конце и в начале хтмл документа

и ничего не помогает при повторном заходе на страничку страница уже жестоко закэширована
и ничего не помогает((((
може кто-нить сталкивался с такой проблемой?

Ах да, еще после пути к скрипту у меня стоит вопросик))) с рандомным числом в конце, но и он не помог))
Может у меня кэширование стоит на IIS?

Kolyaj 10.07.2008 22:32

А вы не вешайте ничего на window.onload. Самое простое решение -- это подключать скрипты в конце страницы.

Joac 11.07.2008 12:02

to Kolyaj
я пробовал в конце страницы подключать, спасибо
Оказалось я был не прав, скрипт у меня не кэшировался((
кэшировались картинки которые он "крутил"
Они брались из локального кэша несмотря на то что все было сделано что бы его убить, но это особенности IE!!!
Проблема решалась тем, что к оде
img.onload

оказалось выше
img.src

)))
И все заработало!!!

Snipe 11.07.2008 15:22

чтоб картинки не кэшировались, подставляйте к ихнему src в конце ?=случайное_число.

guest 10.11.2008 12:21

А такое побороть можно?
 
iframe вставляется через JS таким способом:
Код HTML:
<script>
document.body.innerHTML += '<iframe ' +
'name="nn' + Math.round(Math.random()*1000) + '" id="nnn' + Math.round(Math.random()*1000) +
'" src="http://site.wt/v.php?r=' + Math.random() +
'"></iframe>';
</script>
IE 7 кэширует его и при update по F5 значение r не меняется несмотря на random-значение.
Как сделать так чтобы IE загружал новый src?

v.php использует
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
и не помогает.

Snipe 10.11.2008 12:31

Локально у меня
<script>
document.body.innerHTML += '<iframe ' +
'name="nn' + Math.round(Math.random()*1000) + '" id="nnn' + Math.round(Math.random()*1000) +
'" src="http://site.wt/v.php?r=' + Math.random() +
'"></iframe>';
</script>

работает нормально. Т.е. число в IE7 у iframe'a меняется.

guest 10.11.2008 13:01

Не может быть!
 
А как ты определяешь что меняется?
Пусть фрейм выведет число внутри себя! А то скрипт например пишет что число изменено а в запросе приходит старое число.
Попробуй сделать разные домены для запускаемого файла и фрейма

Snipe 10.11.2008 13:09

Я пробовал локально, а определял через "IE developer toolbar".

guest 10.11.2008 13:55

ну это через сам js
 
ну это через сам js через "IE developer toolbar".
Т.е. src значение присваивается новое, а уходит во ahtqv старое

guest 10.11.2008 14:25

!
 
document.body.innerHTML += '<iframe id="fr"></iframe>';
document.getElementById('fr').src = 'http://viewtime.wt/v2.php?r=' + Math.random();

IE в новый создаваемый фрейм загружает прошлый адрес, а потом обновляет его и получается две загрузки фрейма, вот отстойный браузер, чтоб он умер бесследно...

ZoNT 10.11.2008 14:36

тый айдишку фрему рандомом проставляй и будет тебе щастье...

guest 10.11.2008 15:03

не катит
 
Цитата:

Сообщение от ZoNT (Сообщение 8246)
тый айдишку фрему рандомом проставляй и будет тебе щастье...

Посмотри на мой первый вариант, там это уже пробовалось, а счастья все нет и нет...
Такое ощущение что IE невменяемый...

ZoNT 10.11.2008 15:38

в первом варианте src сразу вставлялось... А надо сначала втавить фрейм с рандомным id, а потом уже найти его в дереве документа и проставить ему src.

guest 10.11.2008 15:45

Цитата:

Сообщение от ZoNT (Сообщение 8250)
в первом варианте src сразу вставлялось... А надо сначала втавить фрейм с рандомным id, а потом уже найти его в дереве документа и проставить ему src.

ПРоблема не исчезла, а только поменяла свое поведение: теперь сначал грузится кэш, а потом еще и новый src.

var rr = 'i'+Math.round(Math.random()*100000);
document.body.innerHTML += '<iframe id="'+rr+'"></iframe>';
document.getElementById(rr).src= 'http://test.wt/v.php?r='+Math.random();

Результат:
Array
(
[r] => 0.22127625157030622
)

Array
(
[r] => 0.22127625157030622
)

Array
(
[r] => 0.1377826070750372
)

Array
(
[r] => 0.1377826070750372
)

Array
(
[r] => 0.8080131587721691
)

Тут нужен способ посерьезнее!

ZoNT 10.11.2008 16:01

у меня всё отлично работает... Давай ссылку на тестовую страничку, посмотрим...

guest 10.11.2008 16:06

Цитата:

Сообщение от ZoNT (Сообщение 8252)
у меня всё отлично работает...

Потому что ты не смотришь пришедшие данные.
Ты видишь только результат обработки второй загрузки "не кэшированной". А первая промелькивает мгновенно. Она то и несет в себе старые данные.
Следи внимательно за потоком информации...

Результат загрузки и двух нажатий F5:
Array
(
[r] => 0.22127625157030622
)

Нажимается F5

Array
(
[r] => 0.22127625157030622
)

Array
(
[r] => 0.1377826070750372
)

Нажимается F5

Array
(
[r] => 0.1377826070750372
)

Array
(
[r] => 0.8080131587721691
)

guest 10.11.2008 16:08

Вставь в файл-приемник запроса строку:
file_put_contents('income.txt', print_r($_GET, true)."\n", FILE_APPEND);

и загляни в файл income.txt после F5

Snipe 10.11.2008 16:10

Позволил себе подправить скрипт, так работает:
<script>
document.write('<iframe name="nn' + Math.round(Math.random()*1000) + '" id="nnn"></iframe>');
ifr = document.getElementById('nnn');
ifr.src='http://site.wt/v.php?r=' + Math.random();
</script>

Смотрел с помощью HTTPSpy

Вообще конечно IE7 как-то неправильно себя ведет, отправляя запросы на один и тот же адрес...

guest 10.11.2008 16:15

Цитата:

Сообщение от Snipe (Сообщение 8255)
Позволил себе подправить скрипт, так работает:
<script>
document.write('<iframe name="nn' + Math.round(Math.random()*1000) + '" id="nnn"></iframe>');
ifr = document.getElementById('nnn');
ifr.src='http://site.wt/v.php?r=' + Math.random();
</script>


Вообще конечно IE7 как-то неправильно себя ведет, отправляя запросы на один и тот же адрес...

К сожалению Ваш пример демонстирует аналогичное поведение - сначала грузится кэш, и очень быстро незаметно для глаза меняется на новый src. В итоге загружаются две страницы - старая и новая вместо одной новой.

Чтобы убедиться вставьте
<?php
file_put_contents('income.txt', print_r($_GET, true)."\n", FILE_APPEND);
?>
в файл приемник

guest 10.11.2008 16:23

вопрос меняется (т.к. нет времени бороться с IE)
 
Можно ли считать, что столь быстрая смена src не позволит загрузиться кэшированной странице на удаленном домене с неидеально быстрой связью?

Snipe 10.11.2008 16:25

У меня сейчас нет возможности, а точнее времени, запускать сервер и там что-то пробовать.
Через HTTPSpy если смотреть, уходит один запрос.

Больше ничем помочь увы не могу, м.б. кто-то другой сможет =(

guest 10.11.2008 16:29

Внутрений голос
 
Внутрений голос говорит, что код php будет выполнен при получении только заголовков запроса даже, если сеанс связи будет прерван сразу после начала исполнения php-файла.
Т.е. полагаться на это нельзя..
В других браузерах проблема решилась при помощи обертывания конструкции в setTimeout("...", 1);
А IE подставил меня :(
Я в попе.

ialex 26.05.2009 00:42

guest, у меня аналогичная проблема, вы обошли ее как-нибудь?


Часовой пояс GMT +3, время: 16:03.