• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Vadik(R)
  • Дата начала
V

Vadik(R)

Посмотреть вложение _______.rar
Люди, у меня есть к Вам два вопроса по Веббраузеру.
1. Можно ли сделать так, чтобы открыв какой-то адрес в моей проге, он не сохранялся в обычном браузере.
То есть, я, например, открою через свою прогу , а в моём 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.
Почему если я напишу в "своём" браузере адрес типа
.
Потом напишу:
.
И потом снова напишу
.
То в файле log.dat будет только две строчки?
Можно ли как-нибудь средствами делфи заставить браузер загружать url'ку заново, а не брать из cookie или, вобщем, из памяти?
Заранее спасибо.
 
Z

zubr

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

Vadik(R)

А у меня второй пункт похоже получился, естественно, тоже с извратом. Причем надо его доработать.
Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Flags : OleVariant;
begin
Flags:=navNoHistory+navNoReadFromCache+navNoWriteToCache;
WebBrowser1.Navigate(Edit1.Text, Flags);
end;
Это для кнопки "поехали". Правда работает он вот как. При самом первом нажатии на кнопку "поехали" он окрывает страницу, но никуда её не кеширует. То есть, если я ещё раз напишу такой же адрес, как и в первый раз, то сообщение в файл добавится. В общем это даже сложно объяснить, вот лучше приведу примеры:
1.



в файле будет содержаться две строки Привет_Вадим.
2.



В файле будет три строки: Привет_Вадим, 1, Привет_Вадим.
3.





В файле будет по-прежнему три строки: Привет_Вадим, 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;
Но если удалить эту строчку, то браузер на форме не появляется. Вот я и прошу помочь мне напечатать код, чтобы при нажатии на одну кнопку браузер создавался, а при нажатии на другую уничтожался. Дальше, я думаю, я уже сам разберусь, дело будет за мной.
 
V

Vadik(R)

Всё же тупой проект получится. Ну его нафиг. Лучше я уж поучусь сразу клиент-серверные приложения делать типа асек.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!