37

シナリオ: A.com のページ A には、B.com のページ B を含む IFrame があります。ページ B は jQuery 1.10.1 を使用しており、ページ A と通信する必要はありません。

この事実にもかかわらず、IE9 および IE10 では、jQuery は「SCRIPT5: アクセスが拒否されました」を生成します。エラーが発生し、jQuery の実行をまったく拒否しているようです。クロスドメイン通信や AJAX リクエストなどは必要ありませんが、ページ B でエラーなくロードして実行するには jQuery が必要です。

IE9 および IE10 でこのエラーが表示されないようにする (およびコードの実行を禁止する) 方法はありますか? (参考までに、他のブラウザも同様に「アクセス拒否」エラーを生成しますが、コードの実行を妨げることはありません)


アップデート:

jsFiddle: http://jsfiddle.net/86q5k/4/

ホスト ページの内容は次のとおりです (jsFiddle から)。

<iframe src="http://endorkins.com/test-iframe.html"></iframe>

iFrame ページのコンテンツは次のとおりです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            console.log('Hello!  Congratulations.  Your browser is neat, and doesn\'t sniff glue! (http://bit.ly/12QTvTT)');
        });
    </script>
</head>
    <body>
    </body>
</html>

Chrome での結果 (コンソールのメッセージに注意してください): ここに画像の説明を入力

結果は IE 9.0.8112 になります (コンソールのメッセージが省略されていることに注意してください):

ここに画像の説明を入力

4

3 に答える 3

40

回避策を見つけました。これは、jQuery 1.10.1 のバグ (「機能」?) のようです。jQuery 1.10.0 を使用すると、エラーは発生しなくなりました。

http://jsfiddle.net/86q5k/5/

<iframe src="http://endorkins.com/test-iframe-1.10.0.html"></iframe>

変。非常に奇妙な。1.10.1 でこの問題が発生する理由とその修正方法を誰かが知っている場合、私 (および世界中の jQuery の手下) は非常に知りたいと思うでしょう! :)


更新: これは正当な jQuery 1.10.1 のバグのようです: http://bugs.jquery.com/ticket/13980


更新: @emanuele-greco によると、これは 1.10.2 以降で修正されています。そのため、jQuery のバージョンをアップグレードすると、問題が解決する可能性があります。

于 2013-06-28T18:18:14.473 に答える
8

OK、同じ問題を見つけて、これまでで最も奇妙で恐ろしい解決策で修正しました。

画像を使用してファイル アップロード ダイアログをポップアップし、変更イベントで自動フォーム送信を実行しようとしています。私は、IE ではユーザーが投稿を行うために画像をクリックしなければならないということを諦めていました。フォームに画像を配置しました(サイトのいくつかの場所にあるように。これにより、アクセス拒否エラーが生成されました。ショックでもう一度クリックすると、エラーが発生しました。3回目のクリックで機能しました。もう一度試しました同じ結果で、最初の 2 回のクリックでエラーが発生し、3 回目はうまくいきました。

var files= document.getElementById("newfiles");
files.onchange = addFiles;

function addFiles() {
    try {
        $("#fileupload").submit();
    } catch (e) {
        try {
            $("#fileupload").submit();
        } catch (e) {
            try {
                $("#fileupload").submit();
            } catch (e) {
                alert(e);
            }
        }
    }
};
于 2015-03-20T15:08:59.077 に答える