2 вопроса по Twebbrowser'у

Vadik(R)

Well-known member
12.12.2007
469
0
#1
Посмотреть вложение _______.rar
Люди, у меня есть к Вам два вопроса по Веббраузеру.
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 или, вобщем, из памяти?
Заранее спасибо.
 

Вложения

Z

zubr

#2
1-й пункт решаемый, правда с извратом. По крайней мере я реализовывал.
После посещения страницы надо удалять хистори. Причем метод DeleteUrl интерфейса IUrlHistoryStg ни фига не работает. Эффективно работает метод IContextMenu::InvokeCommand (см. пример в MSDN по ключевому слову DeleteUrlFromHistoryShell). Один большой недостаток данного способа - перед удалением выскакивает мессага с запросом на удаление. Я извращался через оконные функции, чтобы программно ее убить (другого способа не нашел).
 

Vadik(R)

Well-known member
12.12.2007
469
0
#3
А у меня второй пункт похоже получился, естественно, тоже с извратом. Причем надо его доработать.
Вот код:
Код:
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;
Но если удалить эту строчку, то браузер на форме не появляется. Вот я и прошу помочь мне напечатать код, чтобы при нажатии на одну кнопку браузер создавался, а при нажатии на другую уничтожался. Дальше, я думаю, я уже сам разберусь, дело будет за мной.
 

Vadik(R)

Well-known member
12.12.2007
469
0
#4
Всё же тупой проект получится. Ну его нафиг. Лучше я уж поучусь сразу клиент-серверные приложения делать типа асек.