開発^3

Web開発、宇宙開発、ゲーム開発の3種類についてつらつらと

IEのセキュリティ設定を「ダイアログを表示する」に指定しているとCreateObject("ADODB.Stream")が失敗する

VBScriptを用いてファイルを扱う際に使用されるFileSystemObjectとADODB.Stream。
まぁ、ブラウザから呼び出すのは大分特殊な使い方かと思うが、どうもセキュリティ設定による動作可否がおかしい気がする。


ツール(T)→インターネットオプション(O)→セキュリティタブ→レベルのカスタマイズ(C)
スクリプトを実行しても安全だとマークされていない ActiveXコントロールの初期化とスクリプトの実行
という項目は以下の3つから選択できる。

  • ダイアログを表示
  • 無効にする
  • 有効にする


設定を切り替えつつ試してみるとエラーが出る場合と出ない場合がどうも分かれる。
※切り替えた後にはリロードが必要

CreateObject 有効 無効 ダイアログ(はい) ダイアログ(いいえ)
FileSystemObject × ×
ADODB.Stream × × ×

なぜかADODB.Streamの場合はダイアログで「はい」と答えているにも関わらず429:ActiveXコンポーネントはオブジェクトを作成できません。が返ってくる。

ためしに二度呼んでみてもダメだったが、何か対策あるのかな・・・
なお、IE6/IE7共に確認。ということはIEのバグでは無くてADODB.Streamは何か別の設定項目でもあるのか???謎だ。


サンプルページ
※セキュリティ設定をいじるので一応ソースを確認した方が良いかと。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File output sample</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<script language="VBScript">
<!--
Option Explicit
Function check_OnClick()
	On Error resume next
	Dim objFSO
	Dim objADO

	Set objFSO = CreateObject("Scripting.FileSystemObject")
	MsgBox "Scripting.FileSystemObject result = " & err.Number & ":" & err.Description
	set objADO = CreateObject("ADODB.Stream")
	MsgBox "ADODB.Stream result = " & err.Number & ":" & err.Description
	
	objFSO = Nothing
	objADO = Nothing
End Function
//-->
</script>
</head>
<body>
<input type="button" name="check" value="check">
</body>
</html>