46

内部に HTML ファイル アップロード コントロールを含む HTML フォーム ( upload.htm ) があります。

<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();
}

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

<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 プロジェクトの同じ場所にあります。彼らも同じドメイン名を持っています。なぜこのエラーが発生するのですか?

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

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

4

3 に答える 3

97

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

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

于 2010-12-02T13:15:34.900 に答える
13

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

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

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

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

また、主題に関する公式リファレンスは次のとおりです。

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

上記ページ下部の「コミュニティコンテンツ」を隅々までチェック。

于 2011-06-16T18:18:44.027 に答える
0

フレーム内にある HTML ファイルとフレームを含む別の HTML ファイルの両方で、document.domain='example.com''example.com' がドメイン名である場所を追加してみてください。

于 2010-10-15T11:32:05.897 に答える