IEを自動操作する時,IEのバージョンを判定したい (WSH JScriptで,IE7とIE8の違いを自動認識する)
IEを自動操作するスクリプトを書いていると,
- IE7
- IE8
の挙動の違いにぶつかる。
例えば,フォームにファイルをアップロードする場合など。(サンプルを後述する。)
こういうとき,スクリプトの側でIEのバージョンを判別して,
バージョンに応じて処理を切り替えるようにしておけば,スクリプトの使い回しがきく。
例えば,「IEのバージョンに依存しないファイルアップロードのルーチン」を作成できる。
以下はその方法。
IEのバージョンを表示するサンプルコード
show_ie_version.js
// IEのバージョンが8以降か if( get_major_version_of_installed_ie() <= 7 ) { WScript.Echo("7かそれ以前"); } else { WScript.Echo("8以降"); } // インストールされているIEのバージョンを返します。 function get_major_version_of_installed_ie() { // IEの本体のファイルパスを取得 var ie = WScript.CreateObject("InternetExplorer.Application"); var ie_exe_path = ie.FullName; ie.Quit(); //WScript.Echo( ie_exe_path ); // IE本体のファイルのバージョンを取得 var fso = WScript.CreateObject("Scripting.FileSystemObject"); var ie_exe_version = fso.GetFileVersion( ie_exe_path ); fso = null; //WScript.Echo( ie_exe_version ); // IEのメジャーバージョンを取得 var ie_major_version = parseInt( ie_exe_version.split(".")[0], 10 ); //WScript.Echo( ie_major_version ); return ie_major_version; }
VBA インターネット・エクスプローラ IE のバージョンを調べる
http://makoto-watanabe.main.jp/vba_in...
UWSCでIEのバージョンを取得したい
http://uenomemo.blog31.fc2.com/blog-e...
応用
IE7とIE8で,ファイルのアップロードの方式を切り替えるサンプル。
upload_any_ie_version.js
// IEを起動 var ie = WScript.CreateObject("InternetExplorer.Application"); ie.Visible = true; ie.Navigate("http://localhost/") // ファイルをアップロード type_file_path( ie, "hoge_file_field", "C:\\fuga.txt" ); // -------------- ルーチン --------------- // ファイル参照フィールドにファイルパスを入力する function type_file_path( ie, dom_id, file_path ) { if( is_ie_before_ie8() ) { // IE7用のルーチン // 要素にフォーカス ie.document.getElementById( dom_id ).focus(); WScript.Sleep( 1000 ); // ファイルパスをキー入力 var ws = WScript.CreateObject("WScript.Shell"); ws.SendKeys( file_path ); ws = null; WScript.Sleep( 1000 ); } else { // IE8用のルーチン var ws = WScript.CreateObject("WScript.Shell"); // ファイルパス入力欄にフォーカス ie.document.getElementById( dom_id ).focus(); WScript.Sleep( 100 ); // その右隣にある参照ボタンにフォーカス ws.SendKeys( "{TAB}" ); WScript.Sleep( 100 ); // SPACEキー押下で,ファイル参照ダイアログを開く ws.SendKeys( " " ); WScript.Sleep( 1000 ); // ファイルパスをキー入力 ws.SendKeys( file_path ); WScript.Sleep( 100 ); // ダイアログを閉じる ws.SendKeys( "{ENTER}" ); WScript.Sleep( 1000 ); ws = null; } } // インストールされているIEのバージョンを返します。 function get_major_version_of_installed_ie() { // IEの本体のファイルパスを取得 var ie = WScript.CreateObject("InternetExplorer.Application"); var ie_exe_path = ie.FullName; ie.Quit(); //WScript.Echo( ie_exe_path ); // IE本体のファイルのバージョンを取得 var fso = WScript.CreateObject("Scripting.FileSystemObject"); var ie_exe_version = fso.GetFileVersion( ie_exe_path ); fso = null; //WScript.Echo( ie_exe_version ); // IEのメジャーバージョンを取得 var ie_major_version = parseInt( ie_exe_version.split(".")[0], 10 ); //WScript.Echo( ie_major_version ); return ie_major_version; } // IE7以前か判定します。 function is_ie_before_ie8() { return ( get_major_version_of_installed_ie() < 8 ); }
IE8で,ファイルのアップロードを自動化する方法 (WSH/JScriptでブラウザを自動操作するサンプルコード)
http://language-and-engineering.hatenablog.jp/entry/20100909/p1
IEを自動操作する時,ダイアログやポップアップをどう扱うか(ファイルアップロードやアラートのダイアログを処理する方法)
http://language-and-engineering.hatenablog.jp/entry/20100727/p1