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にアクセスしようとしたときに「アクセスが拒否されました」 ですが、助けにはなりませんでした。
IEは、セキュリティ上の理由により、javascriptからtype = "file"入力要素を操作することを許可していません。ファイル名を設定するか、クリックイベントを呼び出してブラウザダイアログを表示すると、フォームの送信時に「アクセスが拒否されました」エラーが発生します。InternetExplorerは、呼び出されたメソッドを記憶します。
同様の問題: http://www.webdeveloper.com/forum/showthread.php?t=181272
伝統的に、HTML input type="file"
へのJavaScriptアクセスは、セキュリティ上の懸念から厳しく制限されています。知る限りでは、ファイルアップローダー要素でJSを使用して次の操作を行うことはできません。
これらはすべて、JSを介してバックグラウンドでファイルを盗むなどの悪意のある攻撃を防ぐために用意されています。私はしばらくinput type="file"
要素を使用していませんが、他のブラウザーでも同様の問題(すべてではないにしても)に遭遇するでしょう。
最善の策は、Flashベースのソリューションか、新しいHTML5コントロールです。
また、ここに主題に関する公式リファレンスがあります:
http://msdn.Microsoft.com/en-us/library/ms535263(v = vs.85).aspx
上記のページの一番下にある「コミュニティコンテンツ」を確認します。
フレーム内にあるHTMLファイルとフレームを含む別のHTMLファイルの両方で、document.domain='example.com'
ここで、「example.com」はドメイン名です。