4

IE は非同期ファイル アップロードをサポートしていないため、フォームを iframe に投稿するという回避策を使用しています。iframe の onLoad イベントをバインドし、イベントが発生したときにその内容を読み取ります。サーバーが 200 以外のステータス コードを返した場合を除き、これはうまく機能します。IE8/IE9 は「SCRIPT5: アクセスが拒否されました」というエラーをスローします。Microsoft は、リクエストが 200 OK を返さない限り、誰も iframe の内容を読み取ることを許可されるべきではないと決定したようです。

グーグルで調べても何も出てこなかったので、ここで助けを求めています。他の誰かがこの奇妙な動作を再現できますか? とにかくこの問題の周りにありますか?

iframe は、クロスサイト セキュリティ ポリシーに違反していません。それはすべて同じドメインにあります。

4

1 に答える 1

4

フィドラーで問題を再現しようとしているときに、これを解決したと思います。IEで「ShowFriendlyHTTPエラーメッセージ」をオフにすると、修正されるようです。fiddlerで再現できなかった理由は、404ページが512バイトを超えているため、nginxエラーが表示されるためです。

基本的に、全体的な問題は、ページが512バイト(場合によっては256バイト)未満の場合、IEがページ全体を置き換えて、プログラムでそのページへのアクセスをブロックする結果になることです。明らかに、IE10にまだ存在しているように見えるMicrosoftによる見落とし。

再現は簡単です。サーバーの下のファイル(例:test.html)に以下を配置して512バイト未満の404応答コードを返し、IEがわかりやすいエラーメッセージを表示するように設定されていることを確認します(「test1.file」が実際に表示されないことも確認してください)存在)。開発者コンソールを開いた状態でIEを使用してページにアクセスすると、「アクセスが拒否されました」というエラーが表示されます。ページを更新する方法によって、結果が変わります。CTRL + F5は問題を示していないようですが、CTRL+RまたはF5は問題を示しています。

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script type="text/javascript">
iframe = document.createElement('iframe')
iframe.src = '/test1.file'
document.body.appendChild(iframe )
iframe.contentDocument
</script>
</body>
</html>

さて、IE10のバグレポートを提出できる場所を見つけることができれば、この恐ろしいブラウザーでの生活を少しでも良くすることができます。

于 2012-08-02T09:48:41.177 に答える