web-dev-qa-db-ja.com

IE8でアクセスの取得エラーが拒否されました

HTMLフォーム(upload.htm)があり、その中にHTMLファイルのアップロードコントロールがあります。

<form id="frmupload" name="upload" enctype="multipart/form-data" action="uploadhandler.ashx" method="post">
    <input id="uploader" name="uploadctrl" type="file"/>
</form>

上記のページには、次のようなJavaScriptメソッドも1つあります。

function performUpload(){
    document.getElementById('frmupload').submit();
}

iframe内からページ内でこれを呼び出します(uploadpage.htm):

<iframe id="docframe" src="upload.htm" style="display:none"></iframe>

uploadpage.htmページから次のステートメントを実行しようとしています。

var i = document.getElementById('docframe');
i.contentWindow.performUpload();

Access is deniedというエラーが表示され、デバッガーは最初に表示したJavaScript関数で停止します。両方のファイルは、Webプロジェクトの同じ場所にあります。それらも同じドメイン名を持っています。なぜこのエラーが発生するのですか?

もちろん、以前に、ページを投稿できました。HTMLアップロードコントロールにname属性を設定しなかったときです。しかし、HTMLマークアップでname属性を設定すると、この奇妙なエラーが発生します。なぜこれを初めて取得しなかったのですか?

この投稿を見てください-> スクリプトがIE8でiframeにアクセスしようとしたときに「アクセスが拒否されました」 ですが、助けにはなりませんでした。

45
deostroll

IEは、セキュリティ上の理由により、javascriptからtype = "file"入力要素を操作することを許可していません。ファイル名を設定するか、クリックイベントを呼び出してブラウザダイアログを表示すると、フォームの送信時に「アクセスが拒否されました」エラーが発生します。InternetExplorerは、呼び出されたメソッドを記憶します。

同様の問題: http://www.webdeveloper.com/forum/showthread.php?t=181272

97
Dunc

伝統的に、HTML input type="file"へのJavaScriptアクセスは、セキュリティ上の懸念から厳しく制限されています。知る限りでは、ファイルアップローダー要素でJSを使用して次の操作を行うことはできません。

  1. ファイル名を保持しているため、要素の「値」を読み取ることはできません。
  2. JSを介してファイル選択メニューを起動することはできません。
  3. JSを介してファイルアップローダーコントロールの送信を実行することはできません。

これらはすべて、JSを介してバックグラウンドでファイルを盗むなどの悪意のある攻撃を防ぐために用意されています。私はしばらくinput type="file"要素を使用していませんが、他のブラウザーでも同様の問題(すべてではないにしても)に遭遇するでしょう。

最善の策は、Flashベースのソリューションか、新しいHTML5コントロールです。

また、ここに主題に関する公式リファレンスがあります:

http://msdn.Microsoft.com/en-us/library/ms535263(v = vs.85).aspx

上記のページの一番下にある「コミュニティコンテンツ」を確認します。

13
Rajat

フレーム内にあるHTMLファイルとフレームを含む別のHTMLファイルの両方で、document.domain='example.com'ここで、「example.com」はドメイン名です。

0
Gaurav Saxena