Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2016-02-21 11:58:45 ЛС | профиль | цитата
Здравствуйте!
Как сделать открытие ссылки в новом окне своего браузера с сохранением сессии, чтобы не просто открывалась ссылка, а и передавались все параметры как в IE? Есть ссылки которые через скрипт открываются только в новой вкладке или окне, если просто вставить ссылку и открыть, будет ошибка. Нужно передать сессию в новый webbrowser и не потерять сессию, так как это делается в IE, клик по ссылке - и она открывается в новой вкладке, но сессия не теряется. Есть предложение добавить для WebBrowser точку типа data, эсли она не подключена к хендл другого браузера, то открывать ссылки нового окна в родном IE, а если подключена, то в другом WebBrowser хайясма. Пытался сам изменить hiWebBrowser.pas, изучил код, добавил точку и переменные, но чтото не работает. Как присвоить ppDisp новый WebBrowser?

Вот OnNavigate в hiWebBrowser.pas

procedure OnNavigate(Sender: TObject; const pDisp: IDispatch;
var URL: OleVariant;
var Flags: OleVariant;
var TargetFrameName: OleVariant;
var PostData: OleVariant;
var Headers: OleVariant;
var Cancel: WordBool);

А это новое окно

procedure OnNewWindow(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);

В програмировании новичок, может не так понял. Помогите доделать InlineCode.

Может в TargetFrameName нужно чтото вставлять.
Справка:
TargetFrameName - необязательный. Строка, имя фрейма HTML, в котором следует отобразить ресурс. Если такого фрейма не существует, откроется новое окно.


Если это сделать, то можно будет создать собственный настоящий браузер с вкладками.

Вот схема, как ее доделать? Я так понимаю нужно как-то передать ID сессии.
Make(delphi)
ver(4.05 build 186)
Add(MainForm,3763150,217,133)
{
Width=683
Height=603
}
Add(WebBrowser,7626308,343,196)
{
Top=35
Width=335
Height=520
URL="http://hiasm.net"
Silent=0
Point(NewWindow)
link(NewWindow,7440356:GetData,[])
}
Add(WebBrowser,7727952,441,196)
{
Left=340
Top=35
Width=325
Height=520
URL=""
Silent=0
Point(PHandle)
}
Add(EventFromData,7440356,350,119)
{
link(onEvent,2943768:doEvent1,[])
}
Add(Hub,2943768,392,119)
{
OutCount=3
link(onEvent1,10584606:doData,[(413,125)(413,104)])
link(onEvent2,5430024:doData,[])
link(onEvent3,14442675:doNavigate,[(430,139)(430,279)])
}
Add(DoData,10584606,420,98)
{
Data=Integer(1)
link(onEventData,7440356:doData,[(464,104)(464,114)(338,114)(338,125)])
}
Add(InlineCode,14442675,455,273)
{
WorkPoints=#10:doNavigate|
DataPoints=#2:WB|3:Url|3:Ref|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses kol,Share,Debug,ActiveX,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|12: public |26: Ref,Url,WB:THI_Event;|3: |50: procedure doNavigate(var dt:TData; idx:WORD);|5: end;|0:|14:implementation|0:|33:procedure THiAsmClass.doNavigate;|3:var|56: Flags, Headers, TargetFrameName, PostData: OLEVariant;|21: _Url, _Ref: string;|25: WebBrowser:PWebBrowser;|5:begin|46: WebBrowser:=PWebBrowser(ToIntegerEvent(WB));|14: Flags := '';|24: TargetFrameName := '';|17: PostData := '';|29: _Url := ReadString(dt,Url);|29: _Ref := ReadString(dt,Ref);|44: Headers := 'Referer: ' + _Ref + #10 + #13;|71: Webbrowser.Navigate(_Url, Flags, TargetFrameName, PostData, Headers);|4:end;|0:|4:end.|
link(WB,7727952:PHandle,[])
link(Url,5430024:GetData,[])
link(Ref,7626308:CurrentURL,[(475,251)(349,251)])
}
Add(EventFromData,5430024,462,126)
{
}


карма: 4

0
файлы: 1code_36972.txt [1.7KB] [419]
Гость
Ответов: 17029
Рейтинг: 0
#2: 2016-02-22 12:30:59 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2021-05-21 12:59:10
карма: 0

0
Ответов: 537
Рейтинг: 14
#3: 2016-02-22 15:05:43 ЛС | профиль | цитата
Вобщем сам додумался. Нужно перед кликом получить Cookie и передать их в Headers другому браузеру. Но почему-то нужно на ссылке нажать примерно три раза чтобы корректно передались Cookie. Заметил что если к ссылке в полученных куках добавляется &rnd=(тут какоето число) то работает, если нет то нет. Что это &rnd= кто знает?
карма: 4

0
Ответов: 4658
Рейтинг: 762
#4: 2016-02-22 15:18:15 ЛС | профиль | цитата
Это изменяет адрес ресурса и браузер повторно выполняет запрос страницы с сервера. Иначе страница может браться из кеша (в т.ч. и на прокси-сервере, если такой используется). Как это связано с куки - из вопроса не понятно.
карма: 26

0
Ответов: 537
Рейтинг: 14
#5: 2016-02-24 19:27:22 ЛС | профиль | цитата
Всеравно не работает и куки тут нипричем. Вобщем объясню точно что нужно. У меня есть сайт и на нем стоит скрипт рекламы, если посетитель перейдет на сайт и кликнет на любом месте сайта то один раз загрузится реклама, сам сайт откроется в новой вкладке. Так вот если в моем браузере с вкладкой сделать клик по сайту то реклама откроется, но если снова загрузить сайт и кликнуть, обратно будет открыватся реклама. Вот и не понятно что передается новой вкладке еще, кроме url. Ведь в обычных браузерах реклама открывается только один раз. Если в IE открыть сайт, кликнуть, то в страницу на которой кликнул загрузится реклама, а сайт откроется в новой вкладке и только один раз в сутки. Ну тогда конешно и в моем браузере реклама показыватся не будет. Приходится сначала открыть свой сайт в IE, кликнут, а потом открывать в своей программе, что очень не удобно. Скрипт удалять нехочу, всетаки центы каждый день капают.
Подскажите почему мой браузер не работает как надо, как передать новой вкладке все параметры и какие, чтобы он вел себя как обычный браузер. Я так понимаю теряется сессия. Вот в Headers и куки запихнул, толку ноль.

Вот мои попытки и сам сайт
Make(delphi)
ver(4.05 build 186)
Add(MainForm,3763150,238,224)
{
Width=936
Height=603
}
Add(WebBrowser,7626308,301,301)
{
Top=45
Width=460
Height=520
URL="serseysoft.my1.ru"
Silent=0
Point(NewWindow)
Point(PHandle)
link(NewWindow,7440356:GetData,[])
}
Add(WebBrowser,7727952,399,301)
{
Left=465
Top=45
Width=455
Height=520
URL=""
Silent=0
Point(PHandle)
}
Add(EventFromData,7440356,308,224)
{
link(onEvent,2943768:doEvent1,[])
}
Add(Hub,2943768,350,224)
{
OutCount=5
link(onEvent1,10584606:doData,[(371,230)(371,209)])
link(onEvent2,5430024:doData,[])
link(onEvent3,13980041:doData,[])
link(onEvent4,12538099:SetCookies,[(376,251)(376,307)(303,307)(303,363)])
link(onEvent5,14442675:doNavigate,[(388,258)(388,384)])
}
Add(DoData,10584606,378,203)
{
Data=Integer(1)
link(onEventData,7440356:doData,[(422,209)(422,219)(296,219)(296,230)])
}
Add(InlineCode,14442675,413,378)
{
WorkPoints=#10:doNavigate|
DataPoints=#2:WB|3:Url|3:Ref|5:Cooki|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses kol,Share,Debug,ActiveX,KOLSHDocVw;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|12: public |32: Cooki,Ref,Url,WB:THI_Event;|3: |50: procedure doNavigate(var dt:TData; idx:WORD);|5: end;|0:|14:implementation|0:|33:procedure THiAsmClass.doNavigate;|3:var|56: Flags, Headers, TargetFrameName, PostData: OLEVariant;|29: _Url, _Ref, _Cooki: string;|25: WebBrowser:PWebBrowser;|5:begin|46: WebBrowser:=PWebBrowser(ToIntegerEvent(WB));|14: Flags := '';|24: TargetFrameName := '';|17: PostData := '';|29: _Url := ReadString(dt,Url);|29: _Ref := ReadString(dt,Ref);|33: _Cooki := ReadString(dt,Cooki);|75: Headers := 'Referer: ' + _Ref + #10 + #13'Cookie: ' + _Cooki + #10 + #13;|71: Webbrowser.Navigate(_Url, Flags, TargetFrameName, PostData, Headers);|4:end;|0:|4:end.|
link(WB,7727952:PHandle,[])
link(Url,5430024:GetData,[])
link(Ref,13980041:GetData,[(433,320)(475,320)])
link(Cooki,12538099:cookies,[(440,366)(380,366)(380,401)(321,401)])
}
Add(EventFromData,5430024,420,231)
{
}
Add(Button,2673751,238,301)
{
Left=10
Top=15
Caption="Сайт"
Data=String(serseysoft.my1.ru)
link(onClick,7626308:doNavigate,[])
}
Add(InlineCode,12538099,315,357)
{
WorkPoints=#10:SetCookies|
VarPoints=#7:cookies|
DataPoints=#7:PHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|48:uses KOLSHDocVw,kol,Share,Debug,Windows,WinInet;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|15: wb:PControl;|9: public|21: PHandle:THI_Event;|44: procedure cookies(var dt:TData;idx:word);|47: procedure SetCookies(var dt:TData;idx:word);|49: procedure ClearCookies(var dt:TData;idx:word);|18: procedure Init;|22: Constructor Create;|5: end;|0:|14:implementation|0:|23:procedure EmptyIECache;|4:Var |43: lpEntryInfo : PInternetCacheEntryInfo; |28: hCacheDir : LongWord; |28: dwEntrySize : LongWord; |28: dwLastError : LongWord; |6:Begin |22: dwEntrySize := 0; |81: FindFirstUrlCacheEntry( NIL, TInternetCacheEntryInfo( NIL^ ), dwEntrySize ); |40: GetMem( lpEntryInfo, dwEntrySize ); |85: hCacheDir := cardinal(FindFirstUrlCacheEntry( NIL, lpEntryInfo^, dwEntrySize )); |31: If ( hCacheDir <> 0 ) Then |63: DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName ); |28: FreeMem( lpEntryInfo ); |11: Repeat |26: dwEntrySize := 0; |90: FindNextUrlCacheEntry( hCacheDir, TInternetCacheEntryInfo( NIL^ ), dwEntrySize ); |39: dwLastError := GetLastError(); |67: If ( GetLastError = ERROR_INSUFFICIENT_BUFFER ) Then Begin |48: GetMem( lpEntryInfo, dwEntrySize ); |86: If ( FindNextUrlCacheEntry( hCacheDir, lpEntryInfo^, dwEntrySize ) ) Then |71: DeleteUrlCacheEntry( lpEntryInfo^.lpszSourceUrlName ); |34: FreeMem(lpEntryInfo); |13: End; |49: Until ( dwLastError = ERROR_NO_MORE_ITEMS ); |4:End;|0:|31:constructor THiAsmClass.Create;|5:begin|17: InitAdd(Init);|4:end;|0:|27:procedure THiAsmClass.Init;|5:begin|38:wb:=PControl(ToIntegerEvent(PHandle));|4:end;|0:|30:procedure THiAsmClass.cookies;|5:begin|55:dtString(dt,PWebBrowser(wb).OleObject.Document.cookie);|4:end;|0:|33:procedure THiAsmClass.SetCookies;|5:begin|56:PWebBrowser(wb).OleObject.Document.cookie:=ToString(dt);|4:end;|0:|35:procedure THiAsmClass.ClearCookies;|5:begin|13:EmptyIECache;|4:end;|0:|4:end.|
link(PHandle,7626308:PHandle,[])
}
Add(EventFromData,13980041,469,238)
{
link(Data,7626308:CurrentURL,[(475,226)(391,226)(391,345)(307,345)])
}
Add(InfoTip,16681520,301,336)
{
Info=#4:Куки|
Font=[MS Sans Serif,8,1,0,1]
Height=60
}
Add(InfoTip,4098036,392,357)
{
Info=#7:Переход|
Font=[MS Sans Serif,8,1,0,1]
Height=60
}


------------ Дoбавленo в 19.27:
Неужели никто не знает? Может со второй вкладки в первый браузер тоже что-то передается, в смысле вовторой url, а в первый еще чтото, как их связать друг с другом?
карма: 4

0
файлы: 1code_36981.txt [4.5KB] [478]
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)