Толи я чего не понимаю, толи чудеса какие то :(
В общем написал программку которая раз в час опрашивает страницу статистики посещения.
Естественно каждый раз открывать ИЕ смысла нет - легче в трей ее подвесить.
Всё заработало... всё здорово! НО не у всех обновляется страница (примерно у 10% не обновляется).
Т.е. первый запуск - страничка загрузилась, повторный опрос - берется (видимо) из кеша (!?).
Прочитал массу всего, но понять все равно не могу, в код уже внес цать проверок - а всё тоже. Почему то на некоторых машинах не работает.
Но что совсем странно - если передать фокус окну WebBrowser1 и нажать F5 - она обновляется!
Что не так? На стороне клиента или всё таки можно как то программно решить проблему обновления?
procedure TForm1.Button1Click(Sender: TObject);
var
URL,Flags,
TargetFrameName,
PostData, Headers: OleVariant;
begin
//проверяем, что второй раз запускаем
if (StrToInt(lL.Caption) <> 0) then
begin
//1 попытка заставить обновиться
WebBrowser1.Offline:=True;
Application.ProcessMessages;
WebBrowser1.Offline:=False;
Application.ProcessMessages;
//1 end
//2 попытка заставить обновиться
URL:='about:blank';
Flags:=navNoReadFromCache;
TargetFrameName:=EmptyParam;
Headers:=EmptyParam;
PostData:=EmptyParam;
WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
//2 end
//ждем
while not (WebBrowser1.ReadyState = READYSTATE_COMPLETE) do
begin
Application.ProcessMessages;
end;
//вводим то что нам нужно
URL:='http://192.168.2.1/count.pl';
Flags:=navNoReadFromCache;
TargetFrameName:=EmptyParam;
Headers:=EmptyParam;
PostData:=EmptyParam;
WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
//так у некоторых не работало...
//WebBrowser1.Navigate('http://192.168.2.1/count.pl');
//ждем
while not (WebBrowser1.ReadyState = READYSTATE_COMPLETE) do
begin
Application.ProcessMessages;
end;
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
20-08-2007 05:30
Что ж, проблема решилась добавлением Pragma: no-cache на страницу, но остался осадок - почему у остальных то работало???
20-08-2007 03:01 | Комментарий к предыдущим ответам
Не знаю, как это делать на разных серверах,
А, дошло, это же не статический html, а скрипт на Perl, там заголовок добавляется просто, явным способом.
Посмотрел, действительно no-caсhe нет в тегах страницы :(.
А его и не должно быть. Заголовки в странице не отображаются, но браузер их получает. Другое дело, что есть еще метатеги в Html, аналогичные заголовкам, но это - не то же самое.
Но раз страница не ваша и изменить ее вы не можете, то это конечно не суть важно. :(
А у вас страница из локальной сети или ваша собственная? (сужу по ее адресу http://192.168.2.1/count.pl)
Если да, то должно бы помочь добавление заголовков в ответ от сервера:
Cache-Control: no-cache
Pragma: no-cache -- этот для совместимости с HTTP 1.0
Не знаю, как это делать на разных серверах, должно быть в документации. На Apache может быть можно написать что-то в файле .htaccess в соответствующей папке (точно не знаю). У меня в одной задаче web-сервер был встроенный в программе на основе IdHTTPServer, там это просто делается.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.