2 votes

Plugin jQuery pour formulaire dans Chrome contournant la sécurité inter-domaines bug ?

Je tente d'utiliser jQuery Form Plugin pour gérer les téléchargements de fichiers dans un formulaire ajax.

Tout fonctionne tant que je n'ai pas de input[type=file] dans le formulaire.

Lorsque j'ajoute un type de fichier input au formulaire, il télécharge le fichier et fonctionne comme prévu dans FireFox, mais j'obtiens cette erreur dans Chrome:

Tentative JavaScript non autorisée d'accéder au cadre avec l'URL http://swbdev.net:8888/inc/ajax/edit_page/ depuis le cadre avec l'URL http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements. Les domaines, protocoles et ports doivent correspondre.

Il est clairement indiqué que les domaines, protocoles et ports doivent correspondre. Est-ce que j'ai raté quelque chose, dans cette même erreur, il montre les deux URL et le domaine, le protocole et le port correspondent tous?

Voici le JavaScript appelant le plugin:

$(document).ready(function() { 
    var options = { 
        success:    function(data) { 
            alert(data); 
        },
        dataType: 'html',
        url: '/inc/ajax/edit_page/'
    }; 
    $('#add_elements_form').ajaxForm(options); 
 });

PLUS D'INFORMATIONS:

Cela échoue maintenant également dans FireFox, je ne sais pas pourquoi cela fonctionnait plus tôt, mais voici l'erreur dans FireFox:

Permission refusée pour http://swbdev.net:8888 pour obtenir la propriété Location.href

Il pointe sur cette partie de code dans le plugin:

            function cb() {
            if (xhr.aborted) {
                return;
            }
            var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
            if (!doc || doc.location.href == s.iframeSrc) {
                // réponse pas encore reçue
                if (!timedOut) return;
            }
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
            var ok = true;

Plus précisément, cette ligne:

 if (!doc || doc.location.href == s.iframeSrc

2voto

lastmin0 Points 21

Récemment, j'ai rencontré le même problème avec le téléchargement de fichiers jquery. L'erreur était la même que celle de David B

"Tentative JavaScript non sécurisée d'accéder au frame avec l'URL http://swbdev.net:8888/inc/ajax/edit_page/ à partir du frame avec l'URL http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements. Les domaines, les protocoles et les ports doivent correspondre."

Dans mon cas, à la fois l'URL de la page d'appel et l'URL du téléchargement de fichiers étaient dirigées vers xxx.mydomain.com, mais lors du chargement de la page d'appel, un script JavaScript définissait document.domain sur mydomain.com et provoquait l'erreur. Vérifier document.domain après le chargement de la page d'appel a révélé le problème et il a été résolu en supprimant la ligne document.domain dans le script JavaScript pour xxx.mydomain.com

0voto

mkoistinen Points 3883

Sûrement bizarre. Je recommande d'essayer de définir le tout en "POST" puisque l'input[type=file] le nécessitera. Bien sûr, cela devrait fonctionner même mélangé, mais essayez ceci.

$(document).ready(function() { 
    var options = { 
        success:    function(data) { 
            alert(data); 
        },
        dataType: 'html',
        type: 'POST',   // <-- Cela a été ajouté
        url: '/inc/ajax/edit_page/'
    }; 
    $('#add_elements_form').ajaxForm(options); 
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X