Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebBrowser и ошибка 404, идея ее обработки 
:(
    Опции темы
Dima85
Дата 22.2.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Добрый день, сегодня пришла в голову интересная идея. Уже давно думал о том как можно обрабатывать ошибку 404. Как вам такой способ?


Код

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
  ProgressMax: Integer);
begin

if WebBrowser1.OleObject.Document.All.Tags('title').Item(0).InnerHtml='Нет страницы для отображения '
**

end;


Помогите пожалуйста собрать что IE пишет в title 7 и 5 версии в  в английской и русской сборки. Также как поведет себя скрипт если IE удален с компьютера?

Это сообщение отредактировал(а) Dima85 - 22.2.2009, 11:25
PM MAIL   Вверх
Dima85
Дата 22.2.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Я наверное пролохо объяснил, когда IE выдает свою ошибку 404, в title он пишет "Нет страницы для отображения ". Тоесть я смотрю title если оно такой, я делаю WebBrowser1 допустим невидимым.
Сейчас проверил эти строчьки на деле, но почему-то он не работает как нужно, - После запуска вылетает ошибка и на этом работа программы прекращаеться. подскажите в чем может быть дело?



Код

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
  ProgressMax: Integer);
begin
if WebBrowser1.OleObject.Document.All.Tags('title').Item(0).InnerHtml='Нет страницы для отображения ' then WebBrowser1.visible:=false;
end;

PM MAIL   Вверх
MetalFan
Дата 23.2.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



а зачем так сложно? почему бы просто 404 не обработать?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dima85
Дата 23.2.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



MetalFan, как?
PM MAIL   Вверх
MetalFan
Дата 23.2.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



руками.
Код

procedure TForm1.WebBrowserNavigateError(ASender: TObject; const pDisp: IDispatch; var URL, Frame,
  StatusCode: OleVariant; var Cancel: WordBool);
var
  lCode: Integer;
begin
  if StatusCode = 404 then
....
end;

у TWebBrowser есть событие OnNavigateError.... вот в нем и лови


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dima85
Дата 23.2.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Вы наверное что-то путаете, в WebBrowser нет такого события, по крайней мери я его не вижу.

Это сообщение отредактировал(а) Dima85 - 23.2.2009, 19:54
PM MAIL   Вверх
MetalFan
Дата 23.2.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



какая делфя? у меня в 2007й у TWebBrowser'а такое событие есть


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dima85
Дата 23.2.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Delphi 7 Enteprise
PM MAIL   Вверх
MetalFan
Дата 23.2.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



ну если нету, то аминь)
1. Перейти на более новую среду разработки.
2. попытаться реализовать это событие в веббраузере ручками


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dima85
Дата 25.2.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Не получилось поставить более новую версию Delphi, т.к. у меня SP 1. :( Может у кого-то есть мысли почему не работает мой предложенный пример?
PM MAIL   Вверх
Rrader
  Дата 25.2.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 6
Всего: 191



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ActiveX, OleServer;

type
  TWebBrowser = class(SHDocVw.TWebBrowser)
  protected
    procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
  end;

  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TWebBrowser }

procedure TWebBrowser.InvokeEvent(DispID: TDispID;
  var Params: TDispParams);
const
  DISPID_NAVIGATEERROR = 271;
  INET_E_RESOURCE_NOT_FOUND = -2146697211;
var
  Code: Integer;
  ParamCount, I: Integer;
  VarArray: TVariantArray;
begin
  inherited;
  if DispID = DISPID_NAVIGATEERROR then
  begin
    ParamCount := Params.cArgs;
    SetLength(VarArray, ParamCount);
    for I := Low(VarArray) to High(VarArray) do
      VarArray[High(VarArray) - I] := OleVariant(Params.rgvarg^[I]);
    { StatusCode }
    Code := VarArray[3];
    if Code = INET_E_RESOURCE_NOT_FOUND then
      ShowMessage('Not found!');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://abcdefgh.ru');
end;

end.

Все коды ошибок есть здесь. Будьте внимательны.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
MetalFan
Дата 25.2.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 3
Всего: 128



Rrader, только 404, это HTTP_STATUS_NOT_FOUND (т.е. страница не найдена на конкретном сервере), а не INET_E_RESOURCE_NOT_FOUND (когда сайт не найден). 
а описаны константы ошибок часть (INET_E_xxx) в UrlMon.pas, часть (HTTP_STATUS_xxx)  в WinInet.pas
ну это так, к слову

Это сообщение отредактировал(а) MetalFan - 25.2.2009, 16:22


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.