SQLの窓

2017年03月16日


IE11 で VBScript を使う場合の注意事項 ( 古い社内アプリ移行時必見 )

2015/07/31
この記事書いてから一年以上経過しましたが、問題なくシステムは動作しています。ただ、最近は『互換表示設定』によって自動的にうまく行く方向ですが、いくつかバリエーションがあるので、それは記事最後に記述します

追記(2017/03/16)
VBScript の スクリプト要素の置く位置で、VBScript をデフォルトにできるのは、<meta http-equiv="x-ua-compatible" content="IE=8"> までです(かつ互換表示設定で動いています)。IE=9、IE=10 ではデフォルトにできないです。IE9 以降のテクノロジを使うには、いっその事、VBScript 関連のオブジェクト処理を JavaScript で書くか、実行単位で language="VBScript" を書くかの選択になると思います。(ウチでは当分 IE8 で運用予定ですが)

※ さらに、自分の環境では開発者ツール開いてると何故かデフォルトにできないのが現状です
【2014年03月07日】
XP から Windows7 への移行がいずれ余儀なくされます。今、実際に移行作業中なのですが、元々は10年前に作成していたので、ここに書いて無い事以外にも注意事項がたくさんあります( 極端なのは document.all だったり、css の単位無し定義だったり )
しかし、IE11 はなにもしなければ、VBScript が動かなくなるので、Excel と連携するようなアプリが壊滅してしまいます。その際のテコ入れ時に知っておいたほうが幸せになれる内容です。 まず、以下のコードは JavaScript が IE のデフォルトのスクリプトなので、IE8 でもエラーになります。
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<input type="button" value="実行" onclick='call alert("OK")'>
</body>
</html>

これは基本的な事ではありますが、IE のデフォルトのスクリプトを変更する方法がある事を知る為の事実の前振りでもあります。

最初は、この INPUT だけを IE11 でVBSCript 扱いするには以下のように記述します。
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<input type="button" value="実行" onclick='call alert("OK")' language="VBScript">
</body>
</html>

これは通常の Microsoft のドキュメントでも書かれていますが、これではデフォルトにはなりません。そこで、以下のようにして VBScript を IE のデフォルトスクリプトに変更します
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<script language="VBScript"></script>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<input type="button" value="実行" onclick='call alert("OK")'>
<input type="button" value="実行" onclick='alert("OK");'>
</body>
</html>

※ 11 行目はセミコロンがあるのでエラーになります


つまり、ページの最初に認識されるスクリプト要素が VBScript であれば、デフォルトが VBScript に変更されます。但し、X-UA-Compatible と両方書く場合は、X-UA-Compatible のほうが先でなければなりません。以下のコードは、IE8 のドキュメントモードに変更されずに、IE11 となり、そもそも VBScript が動作しません。
<html>
<head>
<script language="VBScript"></script>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<input type="button" value="実行" onclick='call alert("OK")'>
<input type="button" value="実行" onclick='alert("OK");'>
</body>
</html>



META 要素による、X-UA-Compatible の設定は、それより前に IE の判断の邪魔になるようなものがあると、設定しない動作になるので、X-UA-Compatible はできるだけ先頭にする必要があります。これは、VBScript 以外の対応においてもきちんと対応すべき重要な仕様です。

※ これに関して、Microsoft の開発者ツール(F12)のドキュメントに説明があります
【HTML1115】
一般に、"META" タグが "Script" または "Style" 宣言の後に置かれ、それによりページのドキュメント モードが修正されたことを表します。

X-UA-Compatible META タグをヘッダー内のできるだけ前の位置に移動します。"<title>" と charset の値の直後に配置することをお勧めします。
さらに、Quirks モード( 互換モード / IE6 の時代の過去の互換なので、正確には IE5 ) は、IE5 と指定すると設定されるようです。
<meta http-equiv="X-UA-Compatible" content="IE=5">

『互換表示設定』について



IEの、右上の歯車アイコンで開くメニューの中に、『互換表示設定』という項目がありますが、これは意図的にある条件にあてはまるページを IE8 より前のIE 互換で表示するものですが、その条件が大きく分けて2通りあります。

1) 登録したサイト
2) イントラネット

これによって自動的に古い IE とコンパチブルになるようになっていて、しかもこれで運用したほうがサーバーに渡されるユーザーエージェント文字が完全であるという事を最近確かめました。

そして、HTML の書かれ方によって、コンパチブルになるIE のバージョンが2段階になる事も今回確認しました。
( 他のパターンは未確認です )

1) <!DOCTYPE html> が書かれていると IE7 互換になる
2) 何も無い <html> 始まりだと、IE5(Quirks モード) 互換になる

いずれにしても、VBScript は昔どおり動作しますので、イントラネットで運用されていた旧システムは何もしなくてもほぼ動く事になっています。( 一年前は違ったはずですが・・・ )

関連する記事

IE11 でVBScript が動作しないので、x-ua-compatible を使用して Excel(Excel.Application) の処理を検証




【IEの最新記事】
posted by lightbox at 2017-03-16 15:23 | IE | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり