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

解決


くまじろう  2010-10-06 02:11:28  No: 39286

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


とりあえず  2010-10-07 05:12:27  No: 39287

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


名前なし  2010-10-07 05:49:55  No: 39288

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


Delphi大好き  2010-10-07 08:56:43  No: 39289

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

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


にしの  2010-10-07 11:03:14  No: 39290

こんな感じでどうでしょう。
確認は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-08 05:46:21  No: 39291

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


簡潔がお望み?  2010-10-08 06:07:11  No: 39292

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加