6

私のアプリケーションは、コントロールにWebからロードされた小さなバナーを表示しますTWebBrowser。このバナーは、実際には画像を含むHTMLページです。ユーザーが画像をクリックすると、現在実行中のプロモーションキャンペーンに移動します。

ここでの悪い点は、TWebBrowserでリンクをクリックすると、キャンペーンページがデフォルトのブラウザではなくInternetExplorerで開かれることです。これはIEベースのコントロールであるために発生することは知ってTWebBrowserいますが、選択したユーザーのブラウザーでリンクを開く方法はありますか?

ありがとうございました。

4

2 に答える 2

9

OnBeforeNavigate2イベントでは、要求されたURLを確認し、それが起動するURLである場合はStop()、現在のナビゲーションを呼び出しShellExecute()て、ユーザーのデフォルトの外部ブラウザーでURLを起動します。

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; pDisp: IDispatch; var URL: Variant; var Flags: Variant; var TargetFrameName: Variant; var PostData: Variant; var Headers: Variant; var Cancel: WordBool);
begin  
  if (URL should be launched) then
  begin
    Cancel := True;
    WebBrowser1.Stop;
    ShellExecute(0, nil, PChar(String(Url)), nil, nil, SW_SHOWNORMAL);
  end;
end;
于 2012-07-20T02:11:33.083 に答える
3

TWebBrowserは、独自のNewWindow2イベントを介してDWebBrowserExents2::NewWindow2を公開します

したがって、イベントを処理し、イベント送信者に自動化インターフェースを提供します

procedure TForm1.WebBrowser1NewWindow2(
    ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);

begin  
// create a new browser (e.g. hosted on a new tab /MDI form/ top level window)
// and expose the browser as a property of the new window. 
// Here a form2 object is created to host the new webbrowser instance
...
form2.InitNavigate=False;//the navigation will be triggered after this event
form2.Visible=False;//new window is only for getting the url
ppDisp := form2.WebBrowser1.Application;  
form2.Show;
end;

これで、form2のBeforeNavigate2イベントハンドラーで新しいウィンドウのURLを取得できます。イベントをキャンセルすると、ShellExecuteを使用してデフォルトのブラウザを起動できます。

Windows SP SP2以降のみをサポートしている場合は、新しいウィンドウが作成される前に、引数にURLを提供するNewWindow3イベントをフックできます。

于 2012-07-20T00:28:26.630 に答える