comment puis-je accéder à iframe.contentDocument pour obtenir de réponse à l'issue de la croix-origine de la demande?

Je suis avec succès l'envoi d'un fichier à partir de localhost:8888 à localhost:8080 (autre domaine de la production), mais je ne peux pas lire la réponse HTTP, après le transfert de finitions.

Uncaught SecurityError: impossible de lire le 'contentDocument la propriété
à partir de 'HTMLIFrameElement': Bloqué un cadre avec l'origine
"http://localhost:8888" d'accéder à un cadre d'origine
"http://localhost:8080". Le cadre de la demande d'accès défini
"le document.domaine" de "localhost", mais l'image en cours d'accès n'
pas. Les deux doivent définir "document.domaine" à la même valeur pour permettre
d'accès.

À envoyer le fichier, pour la prise en charge de compatibilité, je vais essayer d'obtenir que cela fonctionne pour <form> en fonction de téléchargement de fichiers; pas XHR base. C'est le HTML de base structure:

<form target="file-iframe" enctype="multipart/form-data" method="POST" action="invalid">
  <input type="file" id="file-input" class="file-input" title="select files">
</form>
<iframe src="javascript:false;" id="file-iframe" name="file-iframe"></iframe>

Pour insérer le <iframe> élément dans le DOM, je ne les suivants:

document.domain = document.domain;
var domainHack = 'javascript:document.write("<script type=text/javascript>document.domain=document.domain;</script>")';

var html = '<iframe id="file-iframe" name="file-iframe"></iframe>';
var parent = document.getElementById('wrapper');
var iframe = UTILS.createDomElement(html, parent);
iframe.src = domainHack;

UTILS.attachEvent(iframe, 'load', function(e) {

  //this throws the above SecurityError
  var doc = iframe.contentDocument || iframe.contentWindow.document;

  //do other stuff...
});

Avant de m'envoyer le formulaire, j'ai mis le action attribut sur la <form> d'être la cible de la croix-URL de domaine:

action="http://localhost:8080/"

Après la présentation de la <form>, le <iframe>'s load événement est déclenché, et j'essaie d'accéder à la <iframe>'s content pour lire la réponse HTTP. Cependant, cela déclenche l'erreur ci-dessus car il s'agit d'un cross-origin demande, et je n'ai pas accès à la <iframe>'s de contenu.

Je pensais que le document.domain hack, mais le message d'erreur me dit que le iframe n'a pas défini le domaine de localhost, même si j'ai mis le iframe's src attribut à la domainHack variable, qui semble exécuter.

Aucune idée de ce que je fais de mal? Comment puis-je définir document.domain être localhost pour le <iframe> et sa mère (qui est la page en cours).


J'ai lu plusieurs StackOverflow de questions, dont certaines MDN articles, et d'autres aléatoires, les résultats sur Google, mais je n'ai pas été en mesure d'obtenir que cela fonctionne. Quelques trucs que j'ai regardé à travers déjà:

Avez-vous essayé postMessage qui est mentionné dans votre premier lien "des Moyens pour contourner la même origine "politique"?
Vérifier ce lien, j'ai écrit un blog pour ce genre de problème crossdomainjavascript.wordpress.com/author/sandeeproop
oui, j'ai essayé postMessage(). la messagerie fonctionne, mais le problème est que j'ai besoin le contenu de l'iframe, je n'en ai pas accès depuis l' contentWindow génère l'erreur.... donc postMessage() est inutile, sauf si je peux obtenir le contenu de l'iframe
J'essaie de trouver une solution à exactement le même problème
Eh bien, nous pourrions suivre tous les mauvais sens. var doc = iframe.contentDocument || iframe.contentWindow.document; C'est la façon dont il est conçu pour être. PostMessage doit arrivé de l'iframe. Selon un ami pour faire ce travail, nous avons pour envoyer le html à partir du serveur (pas de json), avec une fonction qui permettra d'évaluer sur le client et faire la vraie postMessage.

OriginalL'auteur Hristo | 2015-02-23