- - PR -
【SWT】IEコンポーネントNewWindow2イベント
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-29 20:18
よろしくお願いします。
SWTにてオリジナルのブラウザを作成しています。 機能が不足している為、「org.eclipse.swt.browser.Browser」クラスは 使用していません。 org.eclipse.swt.ole.win32.OleFrame org.eclipse.swt.ole.win32.OleControlSite org.eclipse.swt.ole.win32.OleAutomation を使用してIEコンポーネントを呼んでいます。 環境は jdk 1.5.0.11 eclipse 3.2 org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar Windows XP Professonal SP2 IE 6.0 SP2 です。 そこで、IEコンポーネントのNewWindow2イベントが発生した際に新規ウインドウの 表示を禁止して、同じブラウザの別タブに表示するタブブラウザとしたいです。 新規ウインドウの表示をキャンセルし、新規タブブラウザウインドウを作成するまで はできましたが、遷移先のURLを取得できず、新規タブでのリクエスト先が指定 できません。 ちなみにNewWindowイベントとNewWindow3イベントならパラメータに遷移先URLが あるのですが、NewWindowイベントはイベントが発生する条件がわからず、 NewWindow3イベントはWinXP SP2からでないと存在しません。 (Win2kも動作保証となっています) VC++でIDispatchインターフェースのポインタを新規タブへ渡す事で実装している 情報はありましたが、知識不足のため、javaに置き換えて考えられませんでした。 (参照元記事URL) NewWindow2イベントが発生した際に新規ウインドウの表示を禁止して、 同じブラウザの別タブに表示する機能の実現方法があればご教示ください。 よろしくお願いします。 | ||||
|
投稿日時: 2007-12-03 18:22
NewWindow2で返すべきIDispatchは、
OleAutomation auto = new OleAutomation(site); //siteは別タブのOleControlSite int[] id = auto.getIDsOfNames(new String[] {"Application"}); Variant v = auto.getProperty(id[0]); auto.dispose(); IDispatch d = v.getDispatch(); こんな感じで取れます。 event.arguments[0]にセットする際は、 event.arguments[0].setByRef(d.getAddress()); と、アドレスをsetByRefで。 (Cancel=arguments[1]は、遷移をキャンセルするのであればsetByRef(true)で) | ||||
|
投稿日時: 2007-12-03 18:32
FEさん、回答ありがとうございます。
これが知りたかった事です!! ありがとうございます!! まだ、試せていませんが、試したらまた、結果を報告させていただきます。 | ||||
|
投稿日時: 2007-12-04 15:50
ご報告が遅れましたが、試してみました。
新しいタブのBeforeNavigate2イベントで event.arguments[0].setByRef(d.getAddress()); を行うと org.eclipse.swt.SWTException: Failed to change Variant type が発生して終了してしまいます。 取得したIDispatchは新しいタブにどのタイミングでどのように実装すればいいのでしょうか? よろしくお願いします。 |
1