web-dev-qa-db-ja.com

「IE=

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

この事実に関係なく、IE9およびIE10では、jQueryは「SCRIPT5:Access is denied」を生成します。エラーが発生し、jQueryの実行をまったく拒否しているようです。クロスドメイン通信、AJAXリクエストなど)は必要ありませんが、ページBでエラーなしでロードして実行するにはjQueryが必要です。

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


更新:

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

ホストページのコンテンツは(jsFiddleから)です。

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

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

<!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(コンソールのメッセージに注意してください): enter image description here

結果はIE 9.0.8112(コンソールでのメッセージの省略に注意してください):

enter image description here

36
rinogo

回避策を見つけました。これは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/1398


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

40
rinogo

[OK]を私は同じ問題を発見し、これまでで最も奇妙で恐ろしい解決策でそれを修正しました。

画像を使用してファイルアップロードダイアログをポップアップ表示し、変更イベントで自動フォーム送信を実行しようとしています。 IEユーザーは投稿するために画像をクリックする必要があります。自分がサイトのいくつかの場所にいるように、フォームに画像を配置しました。これはアクセス拒否エラーを生成するために、ショックでもう一度クリックし、Yepがエラーを取得しました。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);
            }
        }
    }
};
7

また、Google Hosted LibrariesなどのCDNからjQueryアセットをロードしていないことも確認してください。ドメインが異なるため、MicrosoftがInternet Explorerのクロスサイトスクリプティングから保護するために使用する特定のセキュリティプロトコルに違反します。

4
Brian Ogden