Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

Aller à la page :  1 2

# Permission refusée d'appeler la méthode XMLHttpRequest.open

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.

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

Envoyé par : Paul Rouget

Date : 08/11/2006 15:44

C'est une extension ? Tu travailles dans le chrome ?

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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?

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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 ?

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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é?

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

Envoyé par : Paul Rouget

Date : 08/11/2006 17:35

Je pense qu'il faut que tu joues avec ça: ConfigPolicy

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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!

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

Envoyé par : Paul Rouget

Date : 08/11/2006 23:30

Oui, en utilisant ConfigPolicy.

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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.

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

Envoyé par : gipi

Date : 28/01/2007 23:59

j'ai le meme probleme mais j'ai pas firebug

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

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 ?

# Re: Permission refusée d'appeler la méthode XMLHttpRequest.open

Envoyé par : Paul Rouget

Date : 06/02/2007 14:54

XHR sera cross-domain dans Gecko 1.9 (Firefox 3).

Aller à la page :  1 2

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.