大家好,问题是这样的:
做一个浏览器,使用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 里的内容呢,谢谢。

解决方案 »

  1.   

    WebBrowser2的headers 里的内容应该从WebBrowser1里面取,设个全局变量导过来
      

  2.   

    如何指定user-agent呢? 
    在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;同理改下也行
      

  3.   

    看你的代码,好象固定用了二个webbrowser;
    一般要么用一个,所有页面都在这个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;
      

  4.   

    问题是在 WebBrowser2BeforeNavigate2 里,我根本无法设置 headers 的信息,一设置就出错。
      

  5.   

    可以用BHO加载你的IE,截获事件,并且调用你的程序,不过这个是否属于你的要求之外就不清楚了
      

  6.   

    自己解决了。windows为了安全,BeforeNavigate2里的headers信息不允许在当前线程里修改,
    我使用多线程解决了这个问题。