web-dev-qa-db-fra.com

Empêcher l'erreur "SCRIPT5: l'accès est refusé" dans IE

Scénario: page A sur A.com qui a une IFrame contenant la page B sur B.com. La page B utilise jQuery 1.10.1 et n'a pas besoin de communiquer avec la page A.

Indépendamment de ce fait, dans IE9 et IE10, jQuery génère un "SCRIPT5: l'accès est refusé." erreur et refuse apparemment d'exécuter tout jQuery. Je n'ai pas besoin de communication entre domaines, AJAX requêtes, etc., mais j'ai besoin de jQuery pour charger et exécuter sans erreurs dans la page B.

Existe-t-il un moyen d'empêcher cette erreur d'apparaître (et d'empêcher l'exécution de code) dans IE9 et IE10? (Pour info, les autres navigateurs génèrent de la même manière des erreurs "accès refusé", mais ils n'entravent pas l'exécution du code)


MISE À JOUR:

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

Le contenu de la page d'accueil est (à partir de jsFiddle):

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

Le contenu de la page iFramed est:

<!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>

Résultat en Chrome (Remarquez le message dans la console): enter image description here

Résultat en IE 9.0.8112 (Notez l'omission du message dans la console):

enter image description here

36
rinogo

J'ai trouvé une solution de contournement. Cela semble être un bogue ("fonctionnalité"?) Dans jQuery 1.10.1. Avec jQuery 1.10.0, l'erreur ne se produit plus:

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

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

Étrange. Très étrange. Si quelqu'un connaît la raison pour laquelle cela se produit dans 1.10.1 et comment y remédier, moi (et les serviteurs jQuery du monde entier) serais certainement très intéressé de savoir! :)


MISE À JOUR: On dirait que c'est un bogue jQuery 1.10.1 légitime: http://bugs.jquery.com/ticket/1398


MISE À JOUR: Selon @ emanuele-greco, cela est corrigé dans 1.10.2 et plus. Ainsi, la mise à niveau de votre version de jQuery résoudra probablement le problème.

40
rinogo

Ok, j'ai trouvé le même problème et l'ai résolu avec la solution la plus étrange et la plus horrible qui soit.

J'essaie d'utiliser une image pour faire apparaître la boîte de dialogue de téléchargement de fichier, puis de soumettre automatiquement un formulaire lors de l'événement de modification. J'avais démissionné moi-même qu'en IE les utilisateurs allaient devoir cliquer sur une image pour faire le post. J'ai placé l'image sur le formulaire (comme je l'ai fait à plusieurs endroits sur le site. Cela a généré l'erreur d'accès refusé. En état de choc, j'ai cliqué à nouveau et Yep a obtenu l'erreur. Au troisième clic, cela a fonctionné. qui est moche comme du savon fait maison mais qui fonctionne maintenant est

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
Dyna Dave Johnson

Assurez-vous également que vous ne chargez pas votre ressource jQuery à partir d'un CDN tel que Google Hosted Libraries. Étant donné que le domaine est différent, cela viole certains protocoles de sécurité que Microsoft utilise pour se protéger contre les Cross Site Scripting dans Internet Explorer.

4
Brian Ogden