Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Вниз

и снова TWebBrowser:-)   Найти похожие ветки 

 
ga3   (2003-06-03 17:18) [0]

добрый день уважаемые.
не подскажете ли, как при использовании этого замечательного во всех отношениях компонента программно сэмулировать закрытие ИЕ и последующее его открытие без закрытия окна программы, на котором этот самый бровзер и расположен?


 
Мое имя   (2003-06-03 17:23) [1]

?????????
бровзир.фрее
бровзир.креатэ
не подходит?


 
ga3   (2003-06-03 18:13) [2]

неа, пишет что типа неопознанная ошибка, гатт:-)
проблема в следующем:
надо менять в рантайме иногда юзер-агент. я делаю это так:
uses wininet;
........
........
procedure TForm1.Button1Click(Sender: TObject);
var a: pchar;
s: cardinal;
begin
webbrowser1.Stop;
a:=pchar(edit1.Text);
s:=length(a);
urlmksetsessionoption(URLMON_OPTION_USERAGENT,a,s,0);
internetsetoption(nil,INTERNET_OPTION_SETTINGS_CHANGED,0,0);
form1.WebBrowser1.Navigate(" http://leader.ru/secure/who.html");
end;

текст в едит1 типа такого: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)

при первои нажатии на кнопку все ок, лидер.ру выдает то что я написал в эдите. но млин когда второй раз на нее тыкаешь, нифига не меняется, лидер не показывает изменений:-(. кукисы и проч. перед вторым нажатием я вытираю. как решить трабл?


 
ga3   (2003-06-03 18:18) [3]

блин забыл еще написать: в юзес надо добавить модуль urlmon
сорри:-)


 
ga3   (2003-06-03 20:19) [4]

так ничего и не получилось, весь день просидел над этой дрянью глючной:-(
подскажите плиз примерчик динамического создания веббраузера на форме в рантайме и последующего его уничтожения


 
nikkie   (2003-06-03 23:11) [5]

>ga3
ты вопрос про UserAgent задавал 13.05. тебе было дано два ответа. судя по всему, ты их не читал. как ты считаешь, возникнет ли желание отвечать еще раз?

хотя... видно, что ты за это время несколько продвинулся, это обнадеживает. расскажи, где код-то взял?


 
ga3   (2003-06-04 01:09) [6]

>nikkie
да этож я сам там и писал, чтобы ваше драгоценное внимание привлечь:-)
код взял на МСДН, перерыл все интернет-функции и нашел. портировать под делфи не особо трудно, там все понятно. но блин видишь какая фигня: с помощью того кода что я выше тут написал, только один раз меняется юзер-агент а второй раз - болт. я так думаю что необходимо как бы перезапустить ИЕ... приложение с TWEbBrowser"ом закрывать никак нельзя, поетому надо его как-то переинициализировать чтоли. если кто знает как это сделать, большая просьба написать


 
ga3   (2003-06-15 03:41) [7]

вобщем если кому-то интересно то я продолжу с вашего позволения. проблема не решена до сих пор. суть ее такова: функция urlmksetsessionoption из urlmon.pas при смене юзер-агент успешно действует только один раз, в последуюшие разы нифига не работает, хотя если вызвать ее в таком виде:
urlmksetsessionoption(URLMON_OPTION_USERAGENT_refresh,0,0,0);
то все становится как было, т.е. возвращается к установкам по умолчанию. динамическое уничтожение TWebBrowser и последующее его создание желаемого эффекта не дает.
внимание вопрос: это глюк майкрософта, глюк винХР, глюк у меня на компе, глюк Д6 или у меня с головой что-то не в порядке? глюк у меня на компе можно в принципе исключить, я пробовал и на других компах. мастера, ау! где вы? я думаю это именно тот случай где не надо тыкать человека носом в МСДН или куданить в Фигурнова:-)) мне реально нужна ваша помощь, кто-то 100% должен знать как это делается. помогите если уж не куском кода то хотя бы мыслью поделитесь в каком направлении копать.


 
nikkie   (2003-06-15 22:51) [8]

1. повторюсь еше раз: тебе было дано два ответа. судя по всему, ты их не читал.
2. ты не думаешь, что просто Navigate не срабатывает по причине того, что браузер находится на этой странице? или может страница берется из кеша?
3. покажи ссылку откуда ты взял этот код, поскольку в своем MSDN я такого не вижу.


 
ga3   (2003-06-17 01:58) [9]

>nikkie
1. я повторяю: в моем вопросе от 13.05 ответы только от меня самого. если я совсем видимо туп и не вижу того что видишь ты, кинь в меня линком на эту ветку плиз.
2. я думаю, что Navigate точно срабатывает, кэш перед этим я чищу вручную так что я думаю проблема не в этом. я поставил програмку для отлова хттп заголовков и там видно все что здесь описано, т.е. сменить можно только однажды.
3. http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/reference/functions/urlmksetsessionoption.asp

P.S. видимо й тебя другой МСДН а у меня делфимастер.ру:-)


 
nikkie   (2003-06-17 02:15) [10]

1. значит было более 1 вопроса от 13.05
2. ну если программкой видишь, то убедил
3. дык эта просто дока по urlmksetsessionoption. там же не написано, что ты должен вызвать urlmksetsessionoption + internetsetoption и у тебя все пучком будет...

>P.S. видимо й тебя другой МСДН а у меня делфимастер.ру:-)
эт-то ты угадал. ссылкой кинуть не могу - та ветка уж давно уехала в архив. но так и быть, сейчас сюда запощу ту тему.


 
nikkie   (2003-06-17 02:17) [11]

ga3 © (13.05.03 00:17)
вопрос на засыпку: ребята, подскажите плиз, как в виндах можно сменить версию IE, например у меня стоит ИЕ5.5 а я хочу чтобы сервер думал что у меня стоит ИЕ6.0? такая вот проблемка

»» Перемещено из конференции "Вопросы по сетям"
--------------------------------------------------------------------------------
ga3 © (13.05.03 00:20)
а еще лучше так: у меня на форме лежит TWebBrowser, я хочу чтобы при навигации можно было менять это самый юзер-агент. вот так вот:-) помогите плиз, MSDN молчит на эту тему как рыба об лед. если можно примерчик.


--------------------------------------------------------------------------------
ga3 © (14.05.03 16:41)
ну блин че никто так и не знает как эту напасть сделать?


--------------------------------------------------------------------------------
Ihor Osov"yak © (14.05.03 23:33)
Два варианта:

1. http://www.euromind.com/iedelphi, property UserAgent, цитирую сюда:

procedure TEmbeddedWB.SetUserAgent;
var
reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey("\Software\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent\Post Platform", True)
then Reg.WriteString(FUserAgent, "");
finally
Reg.CloseKey;
Reg.Free;
end;
end;

Не проверял, но людям верить надо...


2. Изменяем заголовок запроса, посылаемого на сервер..
Или на уровне APP (асинхр. настраевыемых протоколов - перехват и подмена), либо делаем запрос wininet функциями, а результат уже подпихиваем TWebBrowser...

Может еще можно поиграть на уровне BeforeNavigate2, см - Headers: OleVariant; - но до этого руки не доходили, поищи сам на гугле..





--------------------------------------------------------------------------------
nikkie © (15.05.03 01:21)
вариант 3 - из MSDN (ID: Q183412, PRB: WebBrowser Control Clients Share Global Settings)

MSHTML will also ask for a new user agent via DISPID_AMBIENT_USERAGENT when navigating to clicked hyperlinks. This ambient property can be overridden, but it is not used when programmatically calling the Navigate method.

Приведенный пример там - исключительно на MFC, поэтому не очень помогает. Но для изменения "ambient property" плясать надо от метода Invoke. Ниже пример на дельфи, только для простоты я воспользовался TEmbeddedWB - там есть событие OnInvoke - не надо писать своего наследника от TWebBrowser.

К сожалению, этот метод работает только когда юзер сам кликает по ссылке. Для программной навигации надо видимо запихать User-Agent в параметр Headers (что-то типа того, что написано в закомментаренных строчках в FormCreate - вроде работает, но остальные поля, например HTTP_ACCEPT, коцаются; с этим надо еще поэкспериментировать).

uses
... ActiveX, EmbeddedWB, IEConst;

procedure TForm1.FormCreate(Sender: TObject);
var
Doc: Variant;
Headers: OleVariant;
begin
EmbeddedWB1.Navigate("about:blank");
Doc := EmbeddedWB1.DefaultInterface.Document;
Doc.write("<a href=" http://www.proxychecker.ru/browser.phtml">click me</a>");

// Headers := "User-Agent: Nu ochen hitryi browser"#13#10;
// EmbeddedWB1.Navigate(" http://www.proxychecker.ru/browser.phtml",
// EmptyParam, EmptyParam, EmptyParam, Headers);
end;

const
USER_AGENT: WideString = "takoi vot hitryi browser";

function TForm1.EmbeddedWB1Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params: tagDISPPARAMS; VarResult,
ExcepInfo, ArgErr: Pointer): HRESULT;
begin
if (Flags and DISPATCH_PROPERTYGET <> 0) and (VarResult <> nil) and
(DispId = DISPID_AMBIENT_USERAGENT) then
begin
( VarResult) ga3 © (13.05.03 00:17)
вопрос на засыпку: ребята, подскажите плиз, как в виндах можно сменить версию IE, например у меня стоит ИЕ5.5 а я хочу чтобы сервер думал что у меня стоит ИЕ6.0? такая вот проблемка

»» Перемещено из конференции "Вопросы по сетям"
--------------------------------------------------------------------------------
ga3 © (13.05.03 00:20)
а еще лучше так: у меня на форме лежит TWebBrowser, я хочу чтобы при навигации можно было менять это самый юзер-агент. вот так вот:-) помогите плиз, MSDN молчит на эту тему как рыба об лед. если можно примерчик.


--------------------------------------------------------------------------------
ga3 © (14.05.03 16:41)
ну блин че никто так и не знает как эту напасть сделать?


--------------------------------------------------------------------------------
Ihor Osov"yak © (14.05.03 23:33)
Два варианта:

1. http://www.euromind.com/iedelphi, property UserAgent, цитирую сюда:

procedure TEmbeddedWB.SetUserAgent;
var
reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey("\Software\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent\Post Platform", True)
then Reg.WriteString(FUserAgent, "");
finally
Reg.CloseKey;
Reg.Free;
end;
end;

Не проверял, но людям верить надо...


2. Изменяем заголовок запроса, посылаемого на сервер..
Или на уровне APP (асинхр. настраевыемых протоколов - перехват и подмена), либо делаем запрос wininet функциями, а результат уже подпихиваем TWebBrowser...

Может еще можно поиграть на уровне BeforeNavigate2, см - Headers: OleVariant; - но до этого руки не доходили, поищи сам на гугле..





--------------------------------------------------------------------------------
nikkie © (15.05.03 01:21)
вариант 3 - из MSDN (ID: Q183412, PRB: WebBrowser Control Clients Share Global Settings)

MSHTML will also ask for a new user agent via DISPID_AMBIENT_USERAGENT when navigating to clicked hyperlinks. This ambient property can be overridden, but it is not used when programmatically calling the Navigate method.

Приведенный пример там - исключительно на MFC, поэтому не очень помогает. Но для изменения "ambient property" плясать надо от метода Invoke. Ниже пример на дельфи, только для простоты я воспользовался TEmbeddedWB - там есть событие OnInvoke - не надо писать своего наследника от TWebBrowser.

К сожалению, этот метод работает только когда юзер сам кликает по ссылке. Для программной навигации надо видимо запихать User-Agent в параметр Headers (что-то типа того, что написано в закомментаренных строчках в FormCreate - вроде работает, но остальные поля, например HTTP_ACCEPT, коцаются; с этим надо еще поэкспериментировать).

uses
... ActiveX, EmbeddedWB, IEConst;

procedure TForm1.FormCreate(Sender: TObject);
var
Doc: Variant;
Headers: OleVariant;
begin
EmbeddedWB1.Navigate("about:blank");
Doc := EmbeddedWB1.DefaultInterface.Document;
Doc.write("<a href=" http://www.proxychecker.ru/browser.phtml">click me</a>");

// Headers := "User-Agent: Nu ochen hitryi browser"#13#10;
// EmbeddedWB1.Navigate(" http://www.proxychecker.ru/browser.phtml",
// EmptyParam, EmptyParam, EmptyParam, Headers);
end;

const
USER_AGENT: WideString = "takoi vot hitryi browser";

function TForm1.EmbeddedWB1Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params: tagDISPPARAMS; VarResult,
ExcepInfo, ArgErr: Pointer): HRESULT;
begin
if (Flags and DISPATCH_PROPERTYGET <> 0) and (VarResult <> nil) and
(DispId = DISPID_AMBIENT_USERAGENT) then
begin
PVariant(VarResult)^ := USER_AGENT;
Result := S_OK;
end else begin
Result := DISP_E_MEMBERNOTFOUND;
end;
end;



 
nikkie   (2003-06-17 02:29) [12]

только что посмотрел ссылочку из соседней ветки. это ты что ли squol? ну-ну...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.01 c
1-68268
h@1f-e1f
2003-08-07 09:57
2003.08.21
---|Ветка была без названия|---


14-68477
race1
2003-08-06 11:54
2003.08.21
Возможно ли это


1-68357
XanderMan
2003-08-08 10:33
2003.08.21
Подмена Parent компонента


1-68328
Chlavik
2003-08-08 01:20
2003.08.21
Asm- не получается первести процедуру с Delphi, поможете?


14-68515
Александр из Минска
2003-08-05 14:12
2003.08.21
Красота программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский