大家好,问题是这样的:
做一个浏览器,使用WebBrowser或EmbeddedWB控件开发,当打开新窗口的时候,我希望不要弹出到IE中打开,而是我软件里的WebBrowser打开。鉴于此,我采取了下面的方法实现:procedure TForm8.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
ppDisp := WebBrowser2.Application; //指向新窗口
end;procedure TForm8.WebBrowser2BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers); //指回旧窗口
Cancel := True;
end;可是问题来了,打开新页面的确是在原来的WebBrowser1里打开了,但丢失了头部信息 referer 来路地址,
我现在想做的就是如何保留这个 referer 或自己更改 headers 信息以保证有 referer ,或者 我如何获取 headers 里的内容呢,谢谢。
做一个浏览器,使用WebBrowser或EmbeddedWB控件开发,当打开新窗口的时候,我希望不要弹出到IE中打开,而是我软件里的WebBrowser打开。鉴于此,我采取了下面的方法实现:procedure TForm8.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
ppDisp := WebBrowser2.Application; //指向新窗口
end;procedure TForm8.WebBrowser2BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers); //指回旧窗口
Cancel := True;
end;可是问题来了,打开新页面的确是在原来的WebBrowser1里打开了,但丢失了头部信息 referer 来路地址,
我现在想做的就是如何保留这个 referer 或自己更改 headers 信息以保证有 referer ,或者 我如何获取 headers 里的内容呢,谢谢。
在webbrowser的user-agent里加上自己特定的字符串
方法:Delphi(Pascal) codeprocedure TFrameBrowser.goUrl(const url: String);
const
csagent='User-Agent: Mozilla/4.0 (compatible; 。。; ';
var
a0,ae,a1:OleVariant;
begin
a0:=url;
a1:='';
ae:=csagent+'{'+自己特定的字符串+'})';
bagt:=true;
self.WBer.Navigate2(a0,a1,a1,a1,ae);
end;同理改下也行
一般要么用一个,所有页面都在这个webbrowser中显示;要么根据需要,临时创建。下面有一例子:
//处理网页中自动打开新窗口
//转到指定的URL,需要的话,在pagecontrol中创建新显示页面
procedure TForm1.WebBrowserNewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
var
lsweb:TWebBrowser;
nOld,nNew:Integer;
begin
if NewWinOk=True then begin
NewWinOk:=False;
with TTabSheet.Create(PageControl1) do begin//创建新页
PageControl := PageControl1;
ShowHint:=False;
Caption := '空白页';
end;
nNew:=PageControl1.PageCount-1;
//创建TWebBrowser控件
lsweb:=TWebBrowser.Create(self);//创建webBrowser
with lsweb do begin
Left := 0;
Top := 0;
Width := 745;
Height := 575;
Align := alClient;
Visible:=True;
//设置事件
OnProgressChange := WebBrowserProgressChange;
OnNewWindow2 := WebBrowserNewWindow2;
OnDocumentComplete := WebBrowserDocumentComplete;
OnTitleChange:=WebBrowserTitleChange;
OnStatusTextChange:=WebBrowserStatusTextChange;
OnDownloadBegin:=WebBrowserDownloadBegin;
OnDownloadComplete:=WebBrowserDownloadComplete;
end;
PageControl1.ActivePageIndex:=nNew;
TWinControl(lsweb).Parent:=PageControl1.Pages[nNew]; //PageControl1.ActivePage;
ppDisp:=lsweb.DefaultDispatch;
NewWinOk:=True;
end;
end;
我使用多线程解决了这个问题。