TWebBrowserでリンクを既定のブラウザで開くには

解決


くまじろう  2010-10-05 17:11:28  No: 39286  IP: 192.*.*.*

TWebBrowserを使って特定のサイト専用のブラウザを作っています。
一応動いていますが、ページ内のリンク(target="_blank")をクリックするとIEが
開きます。これを既定のブラウザで開くようにしたいのですが、どなたか
方法をご教示いただけませんでしょうか。
過去ログを読んで、NewWindow2やBeforeNavigate2を利用して、ShellExcecuteを
実行する?という辺りまではたどり着いたのですが、うまく行きません。
環境はXPpro sp3、Turbo Delphi Explorerです。よろしくお願いいたします。

編集 削除
とりあえず  2010-10-06 20:12:27  No: 39287  IP: 192.*.*.*

「既定のブラウザ」は何でしょう?
何処がどのようにうまくいかないのかが書いてあれば回答もしやすいかな?

編集 削除
名前なし  2010-10-06 20:49:55  No: 39288  IP: 192.*.*.*

質問者ではありませんが
Delphi アプリ(TWebBrowser) でリンクを踏むと「既定のブラウザ」が firefox であろうと Opera であろうと IE で開かれますね

編集 削除
Delphi大好き  2010-10-06 23:56:43  No: 39289  IP: 192.*.*.*

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  cancel := true;
end;

でIEの起動を防げることは判りました。
ただ、スクリプトエラーと出ますが・・・。
しかし、IEに渡されているURLの取得は出来ませんでした・・。

編集 削除
にしの  2010-10-07 02:03:14  No: 39290  IP: 192.*.*.*

こんな感じでどうでしょう。
確認はDelphi2010+Windows7。

WebBrowser1・・・表示用。
WebBrowser2・・・Width:=0;Height:=0にしておく。NewWindow用

usesにShellApiを追加。

procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool);
var
  a: TObject;
begin
  //新しいウィンドウを開くとき、WebBrowser2に表示を任せる
  WebBrowser2.RegisterAsBrowser := True;
  ppDisp := WebBrowser2.Application;
  Cancel := False;
end;

procedure TForm1.WebBrowser2BeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  //WebBrowser2で開かれる前に渡されるURLでShellExecute。WebBrowser2のNavigateはキャンセル。
  ShellExecute(0, 'open', PChar(String(URL)), nil, nil, SW_NORMAL);
  Cancel := True;
end;

編集 削除
くまじろう  2010-10-07 20:46:21  No: 39291  IP: 192.*.*.*

皆さんレスありがとうございます。
過去ログ「WebBrowser1NewWindow2でURLを取得できますか。」の方法(理解
できていませんが)でURLを取得して、ShellExecuteを実行することで一応
実現できるようになったのですが、にしのさんの方法の方が簡潔で私には
理解しやすそうなので、そうしてみます。

編集 削除
簡潔がお望み?  2010-10-07 21:07:11  No: 39292  IP: 192.*.*.*

リンク先のURLを簡潔に取得したいということであれば、
OnNewWindow3 イベントを利用したらいいと思うけど。
環境が XP Pro Sp3 なら使えるよ。

編集 削除