掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タブ式ブラウザーでポップアップの[閉じる]ボタンを使うとエラー。回避方法は? (ID:44979)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>webbrowserの場合 過去ログにある >{ window.execScript を使ってJavaScriptの window.close の動作を上書きクリア } >で閉じるボタンを無効にすれば …この問題は開示できました。 >このようなことなんでしょうか。 えーと、ぜんぜん違うメカニズムですね。 OnWindowClosing は、元から TWebBrowser(=IEコンポーネント)に用意されている専用のイベントです。 WebBrowserが閉じようとしている時に発生し、閉じるのをキャンセルすることも出来ます。 一方、OnDocumentComplete で window.execScript を使う方法は、Documentを読み込み次第JavaScriptの 動作に干渉し、「Webページに書かれているスクリプト中の window.close を無効化する」ことによって WebBrowserが閉じられないようにするというものです。これはかなり苦しいやり方のように思えます。 >ところがEmbeddedではこれが通用しないのです。 >web : IWebBrowser ;の定義する方法がわかりません。 Delphi6 Personalに、EmbeddedWB(EmbeddedWB_D2005_Version_14.61.zip)を入れて調べてみました。 ※EmbeddedWebBrowser_D6.dpkのvclieをコメントアウトしてインストール、ライブラリパスに EmbeddedWB_D2005\Source\Lib、ブラウザ検索パスにEmbeddedWB_D2005\Source でOkでした。 試してみましたが、単に uses が足りなかった、という状況だと思います。 それで、武田さんのソースに下記のコードを追加したところ、普通に動作(close阻止)されました。 type TIETabSheet = class(TTabSheet) private procedure EmbeddedWB1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); (中略) implementation {$R *.dfm} uses // それぞれEmbeddedWBに付属してる版。TWebBrowser用なら_Ewbを付けないか、_TLBに書き換える。 Mshtml_Ewb, // IHTMLWindow2、IHTMLDocument2 SHDocVw_EWB; // IWebBrowser constructor TIETabSheet.Create(AOwner: TComponent); begin (中略) EmbeddedWB1.OnDocumentComplete := EmbeddedWB1DocumentComplete; // 追加 end; procedure TIETabSheet.EmbeddedWB1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var window: IHTMLWindow2; document: IHTMLDocument2; web: IWebBrowser; begin //**Closeメソッドの無効化 // try // try〜except〜end; は問題を隠してしまうので、とりあえず除去。 web:=pDisp as IWebBrowser; document:=web.document as IHTMLDocument2; window:=IHTMLWindow2(Document.parentWindow); window.execScript('function close() {}','JavaScript'); // except end; end; ただし… 「WebBrowserの閉じられ防止」には window.execScript を使用する方法でなく、OnWindowClosing を 使うのが最も適切だと思います。ですから、必ず あ さんの方法を試してください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.