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) の処理を検証




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

2014年12月24日


IE11 でドキュメントモードを変更して IE8 として VBscript から jQuery にアクセスする

結論から言うと、VBScript から直接 jQuery のオブジェクトを操作できました。言語仕様の違いから、$ は使えませんし、無名ファンクションも無いので事前に Callback 関数を作っておけば VBScript 内でもイベント操作はできますが、関数の引数の仕様が全く違うので、複雑な処理は JavaScript 側で実行するのが吉です。

ただ、JavaScript のオブジェクトは VBScript から参照した時点で VBScript から普通にプロパティやメソッドを参照できる事には少し驚いています。ですが、これならば、Excel 等を使った既存の IE 専用のページで jQuery を使って画面制御やデータ取得が簡単にできそうです。

関連する記事

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

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
// JavaScript オブジェクト用プロパティ名
var jsKey = ["name", "age", "tel"];

// *************************************
// テーブル要素内より JSON を作成して
// VBScript 側に返す
// *************************************
function jsGetTableData() {

	var jsData = {}

	jQuery("#tdata tr").each( function( idx, el ) {
		jsData[jsKey[idx]] = $( el ).find("td").eq(1).text()
	} );

	return jsData;
}
</script>

<script language="VBScript">
' *************************************
' VBScript から JavaScript を呼び出して
' 必要なデータをオブジェクトして取得
' *************************************
Function vbsAction()

	' オブジェクトなので Set が必要です
	Set vbData = jsGetTableData()

	' jQuery を直接呼出しています
	jQuery("#p1").val( vbData.name )
	jQuery("#p2").val( vbData.age )
	jQuery("#p3").val( vbData.tel )

End Function

</script>

</head>
<body>
<input id="bt" type="button" value="実行" onclick="Call vbsAction()" language="VBScript">
<br>
<input id="p1" type="text"><br>
<input id="p2" type="text"><br>
<input id="p3" type="text"><br>

<table id="tdata">
<tr>
	<td>氏名</td><td>山田 太郎</td>
</tr>
<tr>
	<td>年齢</td><td>20</td>
</tr>
<tr>
	<td>電話番号</td><td>01-2345-6789</td>
</tr>
</table>
</body>
</html>




タグ:VBScript IE jquery
posted by lightbox at 2014-12-24 16:38 | IE | このブログの読者になる | 更新情報をチェックする

2014年10月28日


IEによる JavaScriptのセキュリティ上の制限とその解除

この Seesaa でも、投稿用のテキストから文字列を選択して URL ボタンを押すとダイアログが表示されて、URL を入力するようになっており、これはごく普通の処理です。



しかし、IE では昔デフォルトでこの処理が制限されていた事(たぶん2009年のIE7)がありました。それは当時以下の設定を『有効』にすると制限が解除されて正しく使えるようになっていたのですが、現在ではどちらの設定にしても正しく動作するようです。IE の黒い歴史の残骸なのかどうかは解りませんが、Microsoft で関係文書をみつける事はできませんでした。



▼ 当時、こんなダイアログが出て、情報バーをクリックしてから許可してもう一度同じ作業をする必要がありました。



そして、もう一つスクリプトにクリップボードへのコピーを許可する設定があります。



これは今でも健在で、デフォルトではダイアログボックスが表示されて、貼り付けても良いか(またはコピーしても良いか)確認を要求されます。

IEの clipboardData object で、コピーと貼り付けと両方向可能です



これは、知識のあるユーザが利用する場合は有効にしても「実害」は発生しません。まれに、ユーザがコピーした内容をすり替えて悪意のあるサイトに誘導する可能性があったので、問題になって世の中全てがこのようになった経緯があり、Flash でも同様の対応を当時せまられました。実際使うとすれば、IE 限定なのでイントラネット等の閉じたネットワークで使われる事が一般的で、業務処理を行っていた人達には迷惑な話でした。

現在、どうしても必要なユーザは『信頼済みサイト』に対象ページのドメインを登録して、『信頼済みサイト』の設定を変更するといいと思います。

JavaScript を無効にする

現在そのような事は現実的ではありませんが、設定としてはこちらです。IE では、『アクティブスクリプト』と呼ばれており、たぶん昔は JavaScript の替わりに VBScript が使えていたのでそのような呼び名になったのだと思います。



これと同じような設定は、他のブラウザでも存在します。これらは、JavaScript でどのような画面表示がなされているかと言うような、ページの検査に使う事はあります。

XSS フィルターは有効にします



これは純粋なセキュリティ対策です。どのような悪意を持った使われ方をするか想像付かない為、デフォルトで有効で正解です。ただ、自分自身や社内の便利ツールとして、入力した JavaScript で動的に JavaScript の結果が欲しいような場合は、この設定を『信頼済みサイト』に対象ドメインまたは PC 名を登録してこの設定を無効にするといいと思います。


関連する記事

IEの設定 : 信頼済みサイトに移動する時にダイアログを表示しないようにする
フォルダオプションに Windos のレジストリ設定を追加する

関連する Microsoft ドキュメント

IE のセキュリティ ゾーン関連のレジストリ エントリについて


※ 初回投稿 : 2009-07-29





posted by lightbox at 2014-10-28 22:41 | IE | このブログの読者になる | 更新情報をチェックする

2014年10月27日


IEの設定 : 信頼済みサイトに移動する時にダイアログを表示しないようにする

IEでリンクをクリックすると、以下のようなダイアログが出る場合があります。
( 過去に、このような設定に最初からなっている時期がありました )


( Google で自分のサイトを検索して表示させました )

もしこのようなダイアログが表示される場合は「インターネット」では無く「信頼済みサイト」の設定を変更します。



通常は『有効』になっており、自由に移動できるはずですが、『ダイアログを表示する』となっていると、冒頭のダイアログが表示されてしまいます。

信頼済みサイトとは

通常アクセスするサイトは、誰が運営しているか解りませんのでセキュリティはある程度高く設定されています。しかし、WEB上で作業する場合、セキュリティを低く設定したほうが便利な事はたくさんあり、例えば自分が運営しているサイトにアクセスするならば、疑う必要は無いわけですから、「信頼済みサイト」に登録して、セキュリティの設定を変更して運用する場合もあります。




関連する記事

フォルダオプションに Windos のレジストリ設定を追加する
IEの設定 : 混在したコンテンツの表示
IEによるスクリプトの制限の解除

関連するMicrosoft のドキュメント

IE のセキュリティ ゾーン関連のレジストリ エントリについて


初回投稿 : 2009-08-09


posted by lightbox at 2014-10-27 23:46 | IE | このブログの読者になる | 更新情報をチェックする

2014年08月27日


IE11 : 実行済みのページのソースをクリップボードにコピーする

F12 で開発者ツールを表示し、コンソールを開いて以下のコマンドを実行します。
window.clipboardData.setData("Text",document.getElementsByTagName("HTML")[0].outerHTML)
実行すると、通常はクリップボードを使ってもいいか確認ダイアログが出るので『アクセスを許可』して下さい。



▼ 設定部分



Google Chrome の場合
copy(document.getElementsByTagName("HTML")[0].outerHTML)




posted by lightbox at 2014-08-27 23:03 | IE | このブログの読者になる | 更新情報をチェックする

2014年08月26日


IE8 までは、ブロック要素でなくても『page-break-after』は動作してました。というか、正式ドキュメントにそう書いてあります。

page-break-after

上のリンク先は、IE4 の時から存在するドキュメントですが、いまだにこう書いてあります。



記録として残そうと思って、画像にしました。

IEを使った業務アプリではたぶんこれを元に利用されていたと思いますが、IE11 の IE8 のエミュレートで動作しないので注意して下さい。ブロック要素でもどうせ改行するので、BR を変更するだけでいいと思います。(終了タグも必要になりますが)

最初のドキュメントよりちょっと新しい IE9 用の英文ドキュメントでは、BR と HR 以外の全ての要素で使えると書いてありますが、IE11 では使えていません。



タグ:IE トラブル
posted by lightbox at 2014-08-26 20:49 | IE | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

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

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり