WebBrowserコントロールでのIEのバージョン への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 hasumoto  (その他) 投稿日時 2014/6/9 05:14:57
>WebBrowserコントロールの場合、使用している人が自分で互換モードを選択することはできないので>悩ましいです。(このあたりの悩みは以前の投稿でも書きました。)

 >WebBrowserコントロール自体にプログラムからドキュメントモードを設定する手段があればよいの
 >ですが、今のところ私にはわかりません。

少し思いついたのですが、ボタンを用意して、ボタンを押すと、レジストリにIEバージョンの値を設定して、現在のURLを保存して、ブラウザを再起動して、保存したURLを再設定すれば、いかがなものでしょうかね?
投稿者 hasumoto  (その他) 投稿日時 2014/6/9 05:06:00
>Windows7 + IE11 + Visual Studio 2013の環境でユーザーエージェント文字列を確認してみましたが、>どうもIE11でドキュメントモードIE7として動作しているようです。
>VB6なので事情が違うかもしれませんが、根本的には同じActiveXを呼び出していると思うので、同じ>可能性が高いと思います。以下のHTMLを表示させるユーザーエージェント文字列とドキュメントモー>ドから判断できます。
その通りでした。

>Visual Basic のバージョンで解決する問題ではなく、そのアプリケーションを使用する人のWindowsに>入っているIEのバージョンが影響する問題です。
そうらしいですね。

当方のIEのバージョンは9ですが、確かに、ドキュメントモードはIE7で動作していました。

>もう1つは、Webブラウザーを使用している人が互換モードを選択することです。互換モードの選択は>アドレスバーの横に表示される場合がある紙が破けたようなアイコンをクリックするか、またはF12
>で表示される開発者ツールで選択できます。
ブラウザーでは出来ましたが、ウエブブラウザコントロールでは、出来ませんね。F12で出てきたら便利ですが。

>WebBrowserコントロールの場合、使用している人が自分で互換モードを選択することはできないので>悩ましいです。(このあたりの悩みは以前の投稿でも書きました。)
確かに実装するとなると難しいですね。

>WebBrowserコントロール自体にプログラムからドキュメントモードを設定する手段があればよいの
>ですが、今のところ私にはわかりません。
そうですね。無いか、難しいかのどちらか見たいですね。

リンク先も見せて頂きました。有難うございます。
レジストリに値を設定する事で解決しました。リンク先にあるように特にアプリケーションの動作中に変更出来なくても構いませんので、助かりました。
有難うございました。
投稿者 るきお  (社会人) 投稿日時 2014/6/8 11:07:23
>Visual Basic 2010 ExpressをDLして少し勉強します。 
私の投稿がまとまっていなかったので、まとめなおします。
Visual Basic のバージョンで解決する問題ではなく、そのアプリケーションを使用する人のWindowsに入っているIEのバージョンが影響する問題です。

ただし、推測を含んでいます。

  |Windowsに入っているIE | WebBrowserControlが使用するIE | ドキュメントモード
 1|IE6                   |IE6                            |(IE6)
 2|IE7                   |IE7                            |IE7
 3|IE8                   |IE8                            |IE7
 4|IE9                   |IE9                            |IE7
 5|IE10                  |IE10                           |IE7
 6|IE11                  |IE11                           |IE7


新しいIEは古いIEとの互換性を保つために、古いIEのモードで動作させることができます。これを互換モードといいます。古いIEといってもいろいろあるので、どのIEのモードにするかはさらに詳しく選択できます。これをドキュメントモードといいます。

だから、IE11を使っていてもドキュメントモードがIE7だと、IE7用のページはうまく表示できても、IE11の最新機能を使ったページはうまく表示できません。

ドキュメントモードを変更する代表的な方法は2つあり、1つはページの製作者がX-IE-Compatibleというメタ情報を設定すること、
もう1つは、Webブラウザーを使用している人が互換モードを選択することです。互換モードの選択はアドレスバーの横に表示される場合がある紙が破けたようなアイコンをクリックするか、またはF12で表示される開発者ツールで選択できます。

ドキュメントモードが決定される要因は他にもあります。

WebBrowserコントロールの場合、使用している人が自分で互換モードを選択することはできないので悩ましいです。(このあたりの悩みは以前の投稿でも書きました。)

WebBrowserコントロール自体にプログラムからドキュメントモードを設定する手段があればよいのですが、今のところ私にはわかりません。私はあまり詳しくないので、調べれば何かいい方法が発見されるかもしれません。
この件については、同じような悩みを持った人が検索でひっかかりました。
http://social.msdn.microsoft.com/Forums/ie/ja-JP/19d08838-4463-453e-8248-608e708e6e77/webbrowserie?forum=internetexplorerja
投稿者 hasumoto  (その他) 投稿日時 2014/6/8 01:13:52
有難う御座います。参考になります。
Visual Basic 2010 ExpressをDLして少し勉強します。
投稿者 るきお  (社会人) 投稿日時 2014/6/2 22:54:56
>VB6で制作したブラウザがあります。(IEのバージョンは6でしょうか?)
Windows7 + IE11 + Visual Studio 2013の環境でユーザーエージェント文字列を確認してみましたが、どうもIE11でドキュメントモードIE7として動作しているようです。
VB6なので事情が違うかもしれませんが、根本的には同じActiveXを呼び出していると思うので、同じ可能性が高いと思います。以下のHTMLを表示させるユーザーエージェント文字列とドキュメントモードから判断できます。

<!DOCTYPE html>
<html>
<title>test</title>
<h1>TEST</h1>
UserAgent: <span id="lblUserAgent"></span><br/>
DocumentMode: <span id="lblDocumentMode"></span><br/>
<script type="text/javascript">
var lblUserAgent    = document.getElementById("lblUserAgent");
var lblDocumentMode = document.getElementById("lblDocumentMode");
lblUserAgent.innerText = window.navigator.userAgent;
lblDocumentMode.innerText = document.documentMode;
</script>
</html>



>IEのバージョンを上げたいと思っていますが、VB2002では、ダメでしょうか?どのバージョンのVB辺りだと宜しいでしょうか?
VB6のものが、私が試したVS2013のWebBrowserコントロールと同じようなActiveXコントロールの場合、
結局はそのOSにインストールされているIEが動作していることになります。

ただ、既定でドキュメントモードがIE7になっているので、ドキュメントモードだけ変えればそのOSにインストールされているIEと同じものが表示できます。

X-UA-Compatibleヘッダーをつけると簡単にドキュメントモードを変更でき、VS2013のWebBrowserコントロールでもこのヘッダーがうまく動作することを確認できました。
しかし、これはサーバー側でつけるものなので、クライアント側でドキュメントモードを指定するにはどうすればよいか・・・。
でも、最近は多くのサイトでこのヘッダーをつけてくれているので、特に気にしなくてもうまく表示してくれるかもしれません。たとえば、https://www.apple.com/jp/ では次のように指定されていました。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=9" />

ひとまず途中ですがここまで考えてみました。

ページ読み込み時のイベントを拾ってヘッダーにX-UA-CompatibleのMETAタグを追加できるようなことができればあるいはできるかもしれません。

中途半端ですいませんが何か参考になればと思い投稿します。

>又、IEでなくても他のブラウザでも良いのですが、VBでは確か出来ませんね(?)。 
たしか、GeckoはWebBrowserコントロールのように使えるものがあったと記憶しています。あまり話を聞かないので敷居が高いかもしれません。私は使ったことはないです。
投稿者 hasumoto  (その他) 投稿日時 2014/6/2 16:39:12
>又、IEでなくても他のブラウザデも良いのですが、IEでは確か出来ませんね(?)。 
又、IEでなくても他のブラウザでも良いのですが、VBでは確か出来ませんね(?)。 
投稿者 hasumoto  (その他) 投稿日時 2014/6/2 14:14:11
VB6で制作したブラウザがあります。(IEのバージョンは6でしょうか?)
これから、IEのバージョンが古い為、見られないページが増えて来ると予想されるので、IEのバージョンを上げたいと思っていますが、VB2002では、ダメでしょうか?どのバージョンのVB辺りだと宜しいでしょうか?
又、IEでなくても他のブラウザデも良いのですが、IEでは確か出来ませんね(?)。