TWebBrowserを使って特定のサイト専用のブラウザを作っています。
一応動いていますが、ページ内のリンク(target="_blank")をクリックするとIEが
開きます。これを既定のブラウザで開くようにしたいのですが、どなたか
方法をご教示いただけませんでしょうか。
過去ログを読んで、NewWindow2やBeforeNavigate2を利用して、ShellExcecuteを
実行する?という辺りまではたどり着いたのですが、うまく行きません。
環境はXPpro sp3、Turbo Delphi Explorerです。よろしくお願いいたします。
「既定のブラウザ」は何でしょう?
何処がどのようにうまくいかないのかが書いてあれば回答もしやすいかな?
質問者ではありませんが
Delphi アプリ(TWebBrowser) でリンクを踏むと「既定のブラウザ」が firefox であろうと Opera であろうと IE で開かれますね
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
cancel := true;
end;
でIEの起動を防げることは判りました。
ただ、スクリプトエラーと出ますが・・・。
しかし、IEに渡されているURLの取得は出来ませんでした・・。
こんな感じでどうでしょう。
確認は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;
皆さんレスありがとうございます。
過去ログ「WebBrowser1NewWindow2でURLを取得できますか。」の方法(理解
できていませんが)でURLを取得して、ShellExecuteを実行することで一応
実現できるようになったのですが、にしのさんの方法の方が簡潔で私には
理解しやすそうなので、そうしてみます。
リンク先のURLを簡潔に取得したいということであれば、
OnNewWindow3 イベントを利用したらいいと思うけど。
環境が XP Pro Sp3 なら使えるよ。
ツイート | ![]() |