Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 2 вопроса по Twebbrowser'у
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
Vadik(R)
Нажмите для просмотра прикрепленного файла
Люди, у меня есть к Вам два вопроса по Веббраузеру.
1. Можно ли сделать так, чтобы открыв какой-то адрес в моей проге, он не сохранялся в обычном браузере.
То есть, я, например, открою через свою прогу ]]>http://www.google.com/]]>, а в моём IE7 этот адрес не сохранялся.
2. Вот поставил я себе IIS, установил Perl. В папке wwwroot создал cgi-bin, туда бросил следующий перловый файл:
#!/usr/bin/perl -w
use CGI qw(:standard);
use Data::Dumper;
print header;
open (F, ">>log.dat");
print F "$ENV{QUERY_STRING}        ";
print F "$ENV{HTTP_X_FORWARDED_FOR}        ";
print F "$ENV{REMOTE_ADDR}        ";
print F "$ENV{REMOTE_HOST}        ";
print F scalar(localtime);
print F "\n";
close (F);
print "Запись сделана успешно!";

сохранил как log.pl.
Почему если я напишу в "своём" браузере адрес типа
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>.
Потом напишу:
]]>http://192.168.1.2/cgi-bin/log.pl?param=Kak_dela]]>.
И потом снова напишу
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>.
То в файле log.dat будет только две строчки?
Можно ли как-нибудь средствами делфи заставить браузер загружать url'ку заново, а не брать из cookie или, вобщем, из памяти?
Заранее спасибо.
sax_ol
1, 2 - нет.
zubr
1-й пункт решаемый, правда с извратом. По крайней мере я реализовывал.
После посещения страницы надо удалять хистори. Причем метод DeleteUrl интерфейса IUrlHistoryStg ни фига не работает. Эффективно работает метод IContextMenu::InvokeCommand (см. пример в MSDN по ключевому слову DeleteUrlFromHistoryShell). Один большой недостаток данного способа - перед удалением выскакивает мессага с запросом на удаление. Я извращался через оконные функции, чтобы программно ее убить (другого способа не нашел).
Vadik(R)
А у меня второй пункт похоже получился, естественно, тоже с извратом. Причем надо его доработать.
Вот код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Flags : OleVariant;
begin
  Flags:=navNoHistory+navNoReadFromCache+navNoWriteToCache;
  WebBrowser1.Navigate(Edit1.Text, Flags);
end;

Это для кнопки "поехали". Правда работает он вот как. При самом первом нажатии на кнопку "поехали" он окрывает страницу, но никуда её не кеширует. То есть, если я ещё раз напишу такой же адрес, как и в первый раз, то сообщение в файл добавится. В общем это даже сложно объяснить, вот лучше приведу примеры:
1.
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
в файле будет содержаться две строки Привет_Вадим.
2.
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=1]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
В файле будет три строки: Привет_Вадим, 1, Привет_Вадим.
3.
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=1]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=1]]>
]]>http://192.168.1.2/cgi-bin/log.pl?param=Privet_Vadim]]>
В файле будет по-прежнему три строки: Привет_Вадим, 1, Привет_Вадим.
После этого до меня дошла идея, раз самый первый переход не кешируется, то можно перед каждым "поехали" уничтожать браузер и снова создавать его. Вот в этом-то и проблема.
Если взять компонент TEdit, то следующий код будет работать нормально:
var
  form1: TForm;
  edt : TEdit;
procedure ....
begin
  edt:=TEdit.Create(Self);
  with edt do
  begin
     parent:=form1;
     width:=100;
     height:=20;
     top:=20;
     left:=20;
  end;
end;

Но если взять вместо TEdit TWebBrowser, то такой код работать не будет. Точнее будет выскакивать ошибка в строке parent:=form1;
Но если удалить эту строчку, то браузер на форме не появляется. Вот я и прошу помочь мне напечатать код, чтобы при нажатии на одну кнопку браузер создавался, а при нажатии на другую уничтожался. Дальше, я думаю, я уже сам разберусь, дело будет за мной.
sax_ol
Цитата(Vadik(R) @ 10:03:2008 - 11:59) *
А у меня второй пункт похоже получился, естественно, тоже с извратом.

Hint: кэшируются только уникальные запросы.
Vadik(R)
Всё же тупой проект получится. Ну его нафиг. Лучше я уж поучусь сразу клиент-серверные приложения делать типа асек.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.