Проблемы с TwebBrowser - OnDownloadComplate

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

Столкнулся с проблемой при использовании события OnDownloadComplate.
Оно выполняется в любом случае, как бы там загрузка не завершилась.
Как можно определять ответ сервера, например 200, 404, 502 и т.п.?
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

If Pos('404',...)>0 then...
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

Да понятно это, где ее искать???
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

Nikoshka писал(а):Да понятно это, где ее искать???
Прям в Body WebBrowser'а и ищи.

Код: Выделить всё

procedure TfmBrowserForm.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
  sBody:string;
  iDoc:IHtmlDocument2;
  body:IHTMLElement;
begin
  If not assigned((pDisp as IWebBrowser).Document) then Exit;
  (pDisp as IWebBrowser).Document.QueryInterface(IHtmlDocument2,iDoc);
  If not assigned(iDoc) then Exit;
  body:=iDoc.body;
  If not assigned(body) then Exit;
  sBody:=body.innerHTML;
  If (Pos('<H3>Service Unavailable</H3>',sBody)>0) or (Pos('<H3>Gateway Timeout</H3>',sBody)>0) or (Pos('<H1>Internal Server Error</H1>',sBody)>0) then
    begin
      iDoc.url:=iDoc.url;
      Exit;
    end;
end;
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

А цивилизованными методами получить ответ с сервера никак нельзя?
Он же и недоступен может быть, тогда я никакой страницы не получу...

В таком случае, если сервер недоступен я вообще получаю ошибку, когда пытаюсь обратится к doc.all
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

Nikoshka писал(а):А цивилизованными методами получить ответ с сервера никак нельзя?
на более низком уровне можно я думаю, через сокет например
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

Гм... ничего не понял, а почему сам браузер от нас это спрячет? Ведь он так или иначе что-то от сервера получает? Или он вообще ничего не получает?

Можно и сокетами, конечно... эх :(
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

У меня нет возможности проверить компоненту TWebBrowser, но могу предположить что у неё есть отдельное событие на ошибки, и в него он складывает все ошибки которые у него возникают, в том числе и ошибка соединения. У сокетов ведь тоже OnConnect не возвращает ошибку :)
Аватара пользователя
Nikoshka
Сообщения: 120
Зарегистрирован: 15 май 2006, 05:24

SergeyS,
Да я все наделся, что у него есть свойство, а я там найду все ответы на все вопросы моей программы серверу :(
Хорошо, попробую поискать. Но 404 не ошибка, это сервер обрабатывает запрос и отдает реально существующую страницу http://site.ru/404.html поэтому незнаю даже как на это браузер отреагирует...
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

Но 404 не ошибка, это сервер обрабатывает запрос и отдает реально существующую страницу http://site.ru/404.html поэтому незнаю даже как на это браузер отреагирует...
Так тогда тебе не TWebBrowser рыть нужно, а сам сервер на возможность получения вразумительного ответа.
Попробуй сформулировать задачу по-другому, глядишь и ответ другой придет.
Правильно поставить вопрос это половина дела, если не больше...
Ответить