2

アプリケーションでwebbrowserコントロールを使用して、特定のWebページからデータを取得します。このWebページは、IEのバージョンを具体的にチェックするため、古いIEでは機能しません。そこで、レジストリを変更して、アプリケーションがIE 9として機能できるようにしました。ほとんどの場合、すべて問題ありません...

問題は、新しいウィンドウを開く必要がある場合です。何も表示されません。新しいウィンドウはIE7として認識されていると思いますが、IE9に偽装する方法がわかりません。

私も逆に試しました。newwindowのURLを傍受した場合は、IE9に送信するか、Webブラウザーコントロールの別のインスタンスで開くことができると思いました。ただし、newwindowイベントでは、イベントをキャンセルすることしかできません。あなたはそれから有用な情報を得ることができません。

相互運用サービスは私が必要としているものだと思いますが、私はそれらについて何も知りません。

したがって、2つの質問があります。
(1)新しいウィンドウをIE9として識別させることはできますか?(そしてどのように...)
(2)相互運用サービス(または何か、私は気にしない)を使用して新しいウィンドウのURLを取得するにはどうすればよいですか?

4

2 に答える 2

1

NewWindowイベントで、最初のWbコントロールの名前がWB1で、リダイレクト先のコントロールがWB2であると仮定して、WB1NWイベントで次の手順を実行します。

Processed = True ' This cancels the current request.
WB2.Navigate URL ' This redirects it to the second WB2 control.

それ以外の場合、NewWindow(NW)イベントの代わりにNW2(NewWindow2)イベントを使用する場合は、WB1コントロールのNW2イベントでこれを実行します。

Set ppDisp = WB2.object ' Just swaps the objects around to redirect, don't need to issue a cancel.

また、(WB1の)BeforeNavigate2を介してこれを行うことができます。しかし、わずかに異なるコード。

Cancel = True ' Cancel Request.
WB2.Navigate2 URL ' Reissue it to WB2.

これで、リダイレクト先を制御する限り、間違っていない場合はWB2.LocationURLまたはWb2.Document.URLを使用して、新しいウィンドウのURLを簡単に取得できます。

また、レンダリングエンジンをIE9に変更したい場合(IE9がコンピューターにインストールされている場合でも、WBコントロールは互換性のためにIE7レンダリングエンジンを使用します)...オンラインの記事とSOに関する回答(以前の回答の一部を含む) )これは、WBコントロールで使用されるレンダリングエンジンがインストール済みバージョン(IE9)と同じになるようにレジストリを変更する方法を明確にします。それ以外の場合は、常にIE7を使用します。また、マシンにIE4、5、または6がインストールされている場合、レンダリングエンジンには常にIE4が使用されます。3〜4回のバージョン変更後に、レンダリングバージョンが更新されると思います。バージョン10では、WBコントロールのレンダリングバージョンもバージョン10になると思います。

さらにサポートが必要な場合はお知らせください。あなたがどのようにうまくやってきたか、そしてこれがあなたの質問に答えるのに役立ったかどうかを知りたいです。私の例はすべてVB6にありますが、簡単に変換できます。

乾杯。

于 2012-08-31T12:12:36.920 に答える
1

WebBrowserコントロールがはるかに便利なNewWindow3イベントを表示しないのは、(私の観点からは)非常に奇妙です。

このCodeProjectの記事では、非常に簡単に利用できるようにする方法について説明しています。

于 2012-10-10T16:35:14.447 に答える