Lire le fichier: // URL dans IE XMLHttpRequest
Je suis le développement d'une application JavaScript qui est destiné à être exécuté à partir d'un serveur web (sur http) ou à partir du système de fichiers (sur une URL file://).
Dans le cadre de ce code, j'ai besoin d'utiliser XMLHttpRequest pour charger les fichiers dans le même répertoire que la page et dans les sous-répertoires de la page.
Ce code fonctionne très bien ("PASS") lorsqu'il est exécuté sur un serveur web, mais ne fonctionne pas ("PAS") dans Internet Explorer 8 lors de la lancer à partir du système de fichiers:
<html><head>
<script>
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.open("GET", window.location.href, false);
xhr.send(null);
if (/TestString/.test(xhr.responseText)) {
document.body.innerHTML="<p>PASS</p>";
}
}
</script>
<body><p>FAIL</p></body>
Bien sûr, au début, il échoue car pas de scripts peuvent s'exécuter sur le système de fichiers, l'utilisateur est invité une barre jaune, avertissant que "Pour protéger votre sécurité, Internet Explorer a restreint cette page web à partir de l'exécution des scripts ou des contrôles ActiveX qui pourrait accéder à votre ordinateur".
Mais même une fois que je clique sur la barre et "Autoriser le Contenu Bloqué" la page ne parvient toujours pas; je reçois un "Accès Refusé" erreur sur la xhr.appel ouvert.
Ce qui m'intrigue, c', parce que MSDN dit que "Pour des fins de développement, le protocole file://est autorisé à partir de la zone ordinateur Local." Ce fichier devrait être une partie de la Zone ordinateur Local, droit?
Comment puis-je obtenir un code comme cela fonctionne? Je suis très bien avec l'invite de l'utilisateur avec les avertissements de sécurité; je ne suis pas OK avec les obligeant à éteindre la sécurité dans le panneau de contrôle.
EDIT: je ne suis pas, en fait, le chargement d'un document XML dans mon cas; je suis le chargement d'un fichier de texte brut (.txt).
source d'informationauteur Dan Fabulich
Vous devez vous connecter pour publier un commentaire.
Hmm, ça pourrait être la différence entre les natifs de l'objet XMLHttpRequest et les ActiveX? Je crois me souvenir de quelque chose à ce sujet. C'est, au lieu de
essayer
Évidemment, mettre de la mis en place des contrôles pour voir si le navigateur prend en charge ActiveX. Bien sûr, cette possibilité est limitée à seulement IE, en tant que bien.
Je suis tombé par hasard sur exactement le même problème. Comme suggéré ci-dessus, le non-natif ActiveX "constructeur". Je ne suis pas vraiment sûr de savoir si il y a des différentes politiques appliquées pour les deux objets, mais depuis jQuery mentionne le même problème aussi, cela peut être un véritable bug. Voici la partie de code à partir de l'jQuery source (1.4.2, ligne 4948):
Comme suggéré ci-dessus, cela ressemble à une anomalie dans la
Microsoft XMLHttpRequest
. jQuery (Juillet 2011) écrit aussi:-Je confirme cet échec pour IE8.
Une solution est d'utiliser
new window.ActiveXObject( "Microsoft.XMLHTTP" )
pour les fichiers locaux siXMLHttpRequest
ne fonctionne pas.L'échec dans le
xhr.open
ligne de sorte qu'il peut être pris et puis essayezActiveXObject
comme suit:-Ce code permettra au moins de l'utilisation standard
XMLHttpRequest
pour IE9 (non testé) et les futurs navigateurs IE si/lorsque Microsoft corrige la faille. Avec lejQuery
code ci-dessus, non standardMicrosoft.XMLHTTP
sera utilisé chaque fois qu'ActiveXObject
est disponible, même si Microsoft fixer la faute.Je sais c'est vieux mais je voulais clarifier ce qui se passe avec un peu plus de détail, et offre un couple d'options possibles.
Tout d'abord, ce est en fait pas une faille dans IE, mais une fonctionnalité de sécurité qui existe dans Chrome.
Fondamentalement, toute ressource URI avec file://préfixe n'est pas autorisé à charger toute autre ressource URI avec file://préfixe à l'aide de XMLHttpRequest.
Dans IE vous verrez un message de refus d'Accès. Dans Chrome, vous verrez le message "Échec du chargement de ressource: Origine null n'est pas autorisé par Access-Control-Allow-Origin"
Plus d'info -> Informations sur IE et Informations sur Chrome (cherchez --allow-file-access-from-files)
Il ya un couple de solutions de contournement que je suis au courant de rien de ce qui est idéal, comme ils le désactiver une mesure de protection de la sécurité
Une fois de plus, c'est un fonction de sécurité dans les navigateurs pour limiter d'éventuels vecteurs de menaces similaires à la Croix de Domaine de script bloque.