スポンサーリンク

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