Envoyé par : defus
Date : 08/11/2006 14:22
Bonjour, je développe une mini application javascript HTML qui doit pouvoir accéder à internet pour recupérer des inforamtions (donc changement de domaine), mais j'obtient toujours le message d'erreur "Permission refusée d'appeler la méthode XMLHttpRequest.open" lorsque j'exécute l'application, pour tant dans mon fichier pref.js j'ai mis l'instruction user_pref("signed.applets.codebase_principal_support", true); via la page about:config.
J'utilise la version 2.0 de firefox
Voici le code utilisé:
var net = new Object(); net.ContentLoader = function( url, onload, onerror, method,params,contentType,headers,secure) { this.url = url; this.req=null; this.onload=onload; this.onerror=(onerror) ? onerror:this.defaultError; this.secure=secure; this.loadXMLDoc(url,method,params,contentType,headers); } net.ContentLoader.prototype={ loadXMLDoc: function(url,method,params,contentType,headers){ if (!method) { method="GET"; } if (!contentType && method=="POST"){ contentType='application/x-www-form-urlencoded'; } if (window.XMLHttpRequest) { this.req=new XMLHttpRequest(); } else if (window.ActiveXObject) { this.req=new ActiveXObject("Microsoft.XMLhttp"); } if (this.req) { try{ try{ if (this.secure && netscape && netscape.security.PrivilegeManager.enablePrivilege) { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } } catch (err) {} this.req.open(method,url,true); if (contentType){ this.req.setRequestHeader('Content-Type', contentType); } if (headers){ for (var h in headers) { this.req.setRequestHeader(h,headers[h]); } } var loader=this; this.req.onreadystatechange=function(){ loader.onReadyState.call(loader); } this.req.send(params); } catch (err) { this.onerror.call (this); } } }, onReadyState: function() { alert(this.req); var req=this.req; var ready=req.readyState; if (ready==4) { var httpStatus=req.status; if (httpStatus==200 || httpStatus==0) { try { if (this.secure && netscape && netscape.security.PrivilegeManager.enablePrivilege) { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } } catch (err) {} this.onload.call(this); } else { this.onerror.call(this); } } }, defaultError: function() { alert("Erreur XMLHttpRequest!\nurl:"+this.url+"\n\nreadyState:"+this.req.readyState+"\nstatus: "+this.req.status+"\nheaders: "+this.req.getAllResponseHeaders() + "\nContent:" + this.req.responseText); } }
Et voici l'appel:
new net.ContentLoader( 'http://www.google.com', traiterRequete, null, 'GET', null , "text/xml", null,true);
Merci d'avance pour toute aide.
Envoyé par : Paul Rouget
Date : 08/11/2006 15:44
C'est une extension ? Tu travailles dans le chrome ?
Envoyé par : defus
Date : 08/11/2006 15:55
Non, c'est une application HTML classique.
Le code est dans un fichier HTML et je l'ouvre dans Firefox (protocole file://...)
Je viens de faire le test dans IE, tout marche bien.
Dans firefox, j'ai bien la boite de dialogue de demande d'autorisation, mais après j'ai l'erreur permission refusée.
Je n'ai pas envie d'utiliser un proxy php pour faire la tâche.
Please, help. Est ce qu'o peut faire ca déja?
Envoyé par : chBok
Date : 08/11/2006 15:56
Sur le forum de Geckozone, quelqu'un a justement apporté un début de réponse en lisant un lien que j'avais communiqué ( http://developer.mozilla.org/fr/docs/AJA(..) ). Il y est dit que
Pour des raisons de sécurité, il n'est pas possible d'appeler des pages se situant sur un autre domaine. Veillez à utiliser le nom de domaine exact sur toutes vos pages ou vous obtiendrez une erreur 'permission refusée' à l'appel d'open(). Une erreur courante est de charger le site via domaine.tld, mais d'essayer d'appeler des pages avec www.domain.tld.
Est-ce ton cas ?
Envoyé par : defus
Date : 08/11/2006 16:07
C'est justement ce que je dérire réaliser.
Je suis par exemple en localhost et je désire aller sur google.com recupérer des informations via xmlhttprequest.
Sur le site de mozilla justement, ils parlent d'une solution que j'ai appliqué (voir mon premier mail)
J'aimerais savoir qi quelqu'un a déja changé de domaine avec JS sous firefox sans utilisé de script signé?
Envoyé par : Paul Rouget
Date : 08/11/2006 17:35
Je pense qu'il faut que tu joues avec ça: ConfigPolicy
Envoyé par : hhf
Date : 08/11/2006 21:02
le plus simple, c'est que la requette soit passé par le server.
style tu fais ta requette Ajax à TON server dans TON domaine, et ton server via java ou php ou autre va chercher la page desiré sur l'autre domaine, puis tu la retransmé à ton client, elle apparaitra comme appartenant à ton domaine.
Voila, c'est la seule solution que j'ai trouvé. a part bien sur changé la secu...
Envoyé par : defus
Date : 08/11/2006 23:22
Merci pour votre soutient.
Finalement je n'ai pas la réponse à ma question fondementale:
Est ce qu'on peut changer de domaine en Firefox en configurant le navigateur et sans utilisé de script digné?
Je vais continuer à chercher et je vous dirais si j'ai du nouveau!
Envoyé par : Paul Rouget
Date : 08/11/2006 23:30
Oui, en utilisant ConfigPolicy.
Envoyé par : defus
Date : 08/11/2006 23:36
Ok, je vais faire le test de toutes les variabres proposés.
En principe dans la documentation la procédure est simple.
Mais j'essaierais quand même les autres variables pour m'assurer.
Envoyé par : defus
Date : 09/11/2006 17:45
Youpiiiiiiiiiii
Je confirme, XMLHttpRequest peut changer de domaine.
Le code que j'ai fonctionne sous une autre machine.
Il ne me reste plus qu'à trouver d'où vient mon problème sur ma machine.
Je tiens à vosu remercier pour vos encouragement et surtout à Paul Rouget.
Je vous ferais savoir si j'arrive à trouver le problème de config sur ma machine.
Cordialement
Envoyé par : defus
Date : 09/11/2006 18:36
Pas besoin de configurer quoi que ce soit,
La fonctionnalité marche comme un charme.
C'est l'extension FireBug qui était à l'origine de mon problème lorsque je lui demande de suivre les traces de l'éxécution de XMLHttpRequest.
Aparamment l'implémentation de cette extension refuse les accès hors domaine lorsque l'on active le suivi des erreurs XMLHttpRequest.
Donc le sujet est clos je pense
Envoyé par : gipi
Date : 28/01/2007 23:59
j'ai le meme probleme mais j'ai pas firebug
Envoyé par : Christophe Charron
Date : 05/02/2007 21:17
et en mettant
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
juste après la déclaration du XMLHttpRequest ?
Envoyé par : Paul Rouget
Date : 06/02/2007 14:54
XHR sera cross-domain dans Gecko 1.9 (Firefox 3).
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.