ブログ

VBScriptでIE10を互換モードに変更する

2013年6月11日 15:00 | シスキュー技術部 | | 5,787 views
タグ: , , , , ,

このエントリーをはてなブックマークに追加
はてなブックマーク - VBScriptでIE10を互換モードに変更する
reddit にシェア
Pocket
LINEで送る

IE10

InternetExplore10を起動の際に互換モードで動作させるVBスクリプトを作成してみました。

InternetExplore10(IE10)はWindows8では標準、Windows7ではWindowsアップデートによってマイクロソフト社すすめる標準のブラウザになろうとしています。

しかし、かつてIE向けに対応されたWEBシステムなどで、互換性の問題が出てくる例もあるようです。

この互換性の問題を解決するために、IE10には開発者ツールを開いて、ドキュメントモードの変更を行うことで無事動作するという事例もありますが、このドキュメントモードの変更は、毎回ブラウザ起動のたびに手動で変更する必要があります。

この手動での変更をVBスクリプトを利用して、自動化してみます。

VBスクリプト例

ソースは下記の通りです。

ファイル名: LaunchIE10.vbs

[vb]
Option Explicit

‘Define
Dim WSHobj
Dim waitie
Dim quirkstype
Dim siteurl
Dim AryArgs

‘Constant
Const SEC=1000
Const DEFAULT_WAIT=3
Const DEVMODEkey="{F12}"
Const TYPE5="%u"
Const TYPE7="%7"
Const TYPE8="%8"
Const TYPE9="%9"
Const STANDARD="%s"
Const QUIRKS="%q"
Const DEFAULT_URL=""
Const IEPATH="""C:\Program Files\Internet Explorer\iexplore.exe"""

‘Argument Check

waitie=DEFAULT_WAIT
siteurl=DEFAULT_URL
quirkstype=TYPE5

If WScript.Arguments.Count <> 0 then
Set aryArgs = WScript.Arguments

If aryArgs.Count > 0 then siteurl=aryArgs(0)
If aryArgs.Count > 1 then
If IsNumeric(aryArgs(1)) = false Then
waitie = DEFAULT_WAIT
Else
waitie = Cint(aryArgs(1))
End If
End If

If aryArgs.Count > 2 then
Select Case aryArgs(2)
Case "5"
quirkstype = TYPE5
Case "7"
quirkstype = TYPE7
Case "8"
quirkstype = TYPE8
Case "9"
quirkstype = TYPE9
Case "S"
quirkstype = STANDARD
Case "Q"
quirkstype = QUIRKS
Case Else
quirkstype = TYPE5
End select
End If
End If

Set WSHobj = WScript.CreateObject("WScript.Shell")

‘run IE
WSHobj.run IEPATH & " -new " & siteurl

‘wait for IE Active
WScript.sleep waitie*SEC
WSHobj.Sendkeys DEVModeKey

‘wait for DEVControl
WScript.sleep waitie*SEC
WSHobj.SendKeys quirkstype & DEVMODEkey

[/vb]

VBスクリプト解説

IE10で開発者モードに入るにはF12キーを押します。

そこから各互換性モードに入るためには、Altキーとバージョン番号の組み合わせになります。

最も古いブラウザとの互換性のためには、Internet Explorer 5 Quirksというモードが用意されていますが、これはAlt+Uの組み合わせになります。

このキーの組み合わせを、SendKeysというメソッドで擬似的にキー入力させています。

IE9標準モードであればAlt+9など、いくつかのバージョンが用意されていますが、上記VBスクリプトでは、Internet Explorer 5 Quirksというモードをデフォルトで選択するようになっています。

このスクリプトをそのまま実行すると、あたらしいIE10を立ち上げ、標準のホームページを開き、開発者モードに入ってInternet Explorer 5 Quirksにモードを変更して、開発者モードを終了します。

このSendkeysを使う都合で、IEが立ち上がるまで、立ち上がった後キー入力を受け付けるまでの二回、待ち時間を設けています。

標準では3秒みていますが、早いパソコンであれば、1秒ほどの待ち時間でも十分実行できます。この辺りはパソコンや、ページを開くまでの時間によって、適切な時間は変わってきます。

SendKeysはアクティブなウィンドウに対して、キー入力を送るメソッドですので、途中でIE10からフォーカスが移ってしまうと正常に動作しません。

このスクリプトでは積極的にフォーカスを取りに行っていないので、待ち時間中にフォーカスが移ってしまう場合は、改良する必要があるでしょう。

VBスクリプトに引数を与える方法

このVBスクリプトは三つの引数をとるように作成しています。

第一引数は、最初に開くwebサイトのURL。

第二引数は、待ち時間。単位は秒です。

第三引数は、互換モード。5であればInternet Explorer 5 Quirks、7であればInternet Explorer 7 標準という感じになっています。詳しくはスクリプトをご覧いただけるるとご理解いただけると思います。

このスクリプトファイルのショートカットを作り、プロパティのリンク先に、vbsファイル名に引き続くようにして半角スペースで区切りながら三つの引数を入力します。

VBSshortcut

上記スクリーンショットを例に挙げると、弊社コーポレートサイトを、3秒の待ち時間(合計6秒)を設けて開き、Quirksモードに変更する、というショートカットになります。

終わりに

本スクリプトは、動かないWebシステムをIE10で動作させるという保証はできません。

スクリプトでIE10の互換性モードを変更する、ということを実現するためのものです。

動作させる環境によって正常に動作しない場合や、スクリプト実行により何らかの損害を被った場合も一切の責任を負わないものとします。

スクリプトを精査したうえでのご利用をお願いいたします。

IE10で既存のWebシステムが正常に動作しないのは、さまざまな原因があり、システム側の問題、システムが利用しているライブラリの問題、IE10がこれまでのIEとの互換性よりも機能性をとった部分など、数えればいくらでもある可能性と、その組み合わせになっています。

単純にIE10の互換性モードを変更すれば動作するのであれば、このスクリプトもいくらか役に立つ場面もあるかもしれません。

Windows7でいつまでIE9がサポートされるのかはわかりませんが、Windows8では標準のブラウザでもあるので、IEのバージョンダウンだけでは解決できない時はやがてやってくるでしょう。

そのときシステムをIE10にむけて対応するのか、あるいはIE10が変化しているのか、他のブラウザで動作する場合は、他のブラウザを推奨するのか、対応として考えられることは様々ですが、一つの変わった解決策として参考にしていただければと思います。