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>