Nettoyer l'User-Agent avec userChrome.js

Vous vous penchez sur le développement d'applications ou d'extensions pour Mozilla ? C'est alors vers ce forum que se dirigeront naturellement vos requêtes...
Répondre
Avatar de l’utilisateur
~HP
Varan
Messages : 1141
Inscription : 29 juin 2008, 13:22

Nettoyer l'User-Agent avec userChrome.js

Message par ~HP »

Bon, c'est pas vraiment un application… je ne sais pas si il est vraiment nécessaire d'en faire une extension à part entière, notamment de part l'intérêt "geekesque" de la chose…

Mais j'ai écrit un script qui "réinitialise" (pas vraiment) toutes les clefs general.useragent.extra.*, fonctionnant "comme une extension" mais nécessitant l'utilisation de userChromeJS. Parce que l'on voit souvent des UA de cette sorte, par exemple :

Code : Tout sélectionner

Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.6) Gecko/20070725 ImageShackToolbar/4.2.1 Firefox/2.0.0.6
Explications et script : nettoyer l'User-Agent avec userChrome.js.

Commentaires, remarque, suggestions ; ici, ailleurs ou pas :lol:.

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b4pre) Gecko/20090401 Minefield/3.5b4pre
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Mes remarques:

1- j'approuve l'initiative ;) , je déteste (vraiment :evil: ) que des extensions changent mon UA, d'autant que je me souviens que çà faisait planter le plugin Java (je ne sais pas si c'est toujours d'actualité).

2- l'idée de l'userChromeJS me semble pertinente. (Je m'en suis encore jamais servi d'ailleurs)

3- j'aurai personnellement préféré un reset de la préférence en question, plutôt que de vouloir la créer. Example pratique, j'ai déjà eu un bug dans une de mes extensions, ne survenant pas avec le Firefox "officiel", mais survenant sur le Firefox d'une distribution. Bref, l'info de l'UA est pertinente dans le cas des compilations particulières.
Avatar de l’utilisateur
~HP
Varan
Messages : 1141
Inscription : 29 juin 2008, 13:22

Message par ~HP »

martin a écrit :3- j'aurai personnellement préféré un reset de la préférence en question, plutôt que de vouloir la créer. Example pratique, j'ai déjà eu un bug dans une de mes extensions, ne survenant pas avec le Firefox "officiel", mais survenant sur le Firefox d'une distribution.
Heu… je ne suis pas sûr d'avoir compris… mais en s'en servant ainsi :

Code : Tout sélectionner

(function() {
    function main() {
	var UACleaner = new UserAgentCleaner();
        UACleaner.unsetExtras();
    }
ça ne touche pas general.useragent.extra.firefox, donc…

ce qui explique la fonction main() placée en haut du fichier, pour faciliter sa modification… pour le reste, je vais ajouter un test pour éviter de modifier la clef firefox si elle ne le nécessite pas ; c'est simple et logique mais ça m'avait échappé.

Je vais aussi modifier le nom de l'objet en UserAgentCleaner pour éviter toute confusion.

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b4pre) Gecko/20090403 Minefield/3.5b4pre
Invité

Message par Invité »

je préfère effectivement cette solution ;) . Ma remarque était cependant mal formulée, et je n'avais regardé en détail comment fonctionnait le userAgent (j'avais pas percuté qu'il était construit par firefox sur plusieurs préférences).

Comme j'ai regardé un peu plus précisément ton code, quelque remarques supplémentaires (qui se veulent constructives ;)):

Je ne sais pas si c'est une très bonne idée de définir le prototype d'un objet dans le corps de son constructeur :s . Je n'ai jamais vu celà auparavant, et çà implique que les méthodes concernées sont redéfinies à chaque instanciation... (Prefs et Console par exemple). Une meilleurs indentation de ton code le met en évidence.

Je ne vois pas trop l'intérêt de créer ces objets Prefs et Console par ailleurs. Leurs instances pointeront je pense vers le même objet, puisque ce sont des services XPCOM (donc singleton), et leur méthodes natives semblent suffisantes (getCharPref par exemple). Donc une simple variable initialisé sur le service désiré, suffirait pour tout le script.
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

flûte, encore oublié de me loguer...
Avatar de l’utilisateur
~HP
Varan
Messages : 1141
Inscription : 29 juin 2008, 13:22

Message par ~HP »

Pour l'indentation et les prototypes… tout çà… ouais, j'ai merdé…
mais je débute en POO en JavaScript… alors, j'y comprends pas grand chose à la syntaxe !

Rhino me disait que j'avais pas d'erreur de syntaxe, alors bêtement je continuais… :lol:

Le but c'était aussi d'essayer des nouveaux trucs… mais ce que je voulais c'était des classes toutes bêtes avec leurs méthodes dedans… ça fait propre et rangé… j'ai pas encore bien compris comment on fait çà en JavaScript :roll:.


Exemple en PHP4 :

Code : Tout sélectionner

class maClasse {
    var $p1;
    var $p2;
    var $p3;

    function maClasse() {
        $this->p1 = "something";
    }
}
avec une classe et son constructeur…

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b4pre) Gecko/20090403 Minefield/3.5b4pre
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

~HP a écrit : Rhino me disait que j'avais pas d'erreur de syntaxe, alors bêtement je continuais… :lol:
Parce qu'il ne doit pas y en avoir, même si c'est incongru ;) .

Exemple en PHP4 :
~HP a écrit :

Code : Tout sélectionner

class maClasse {
    var $p1;
    var $p2;
    var $p3;

    function maClasse() {
        $this->p1 = "something";
    }
}
avec une classe et son constructeur…
A l'arrache:

Code : Tout sélectionner

function MyClass(aArg) {
    // constructeur
    this.myProperty3 = aArg;
}

MyClass.prototype = {
    // propriétés et methodes "partagées" par toutes les instances
    myProperty1: 'string',
    
    myProperty2: 0,
    
    myProperty3: null,
    
    myMethod1: function(aArg) {
        this.myProperty1 = aArg;
    }
};

MyClass.prototype.anotherMethod = function(aArg) {
    //cette methode est aussi partagée par toutes les instances
}

// cette propriété est aussi connue de toutes les instances
MyClass.prototype.anotherProperty = "toto";

// une instance
var myObject1 = new Myclass("test_1");

myobject1.myMethod2 = function(aArg) {
    // cette méthode n'est disponible que pour cette instance
};

MyClass.prototype.myMethod1 = function(aArg) {
    // cette méthode est maintenant modifiée pour toutes les instances
    alert(aArg);
}
Avatar de l’utilisateur
~HP
Varan
Messages : 1141
Inscription : 29 juin 2008, 13:22

Message par ~HP »

Ok, et si je garde tout pareil… et que je mets des this à la place des ClassName.prototype.functionName…

J'ai ma syntaxe (ou presque) comme en PHP ou Python… où les méthodes sont dans la classe…

Ou j'ai rien compris :roll: :lol:…

Message envoyé avec : Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr-FR; rv:1.9.1b4pre) Gecko/20090403 Minefield/3.5b4pre
Invité

Message par Invité »

tu veux dire quelque chose comme çà ? :

Code : Tout sélectionner

function MyClass(aArg) {
    // constructeur
    this.p1 = "string";
    this.myMethod = function() {
    	alert("tralala");
    };
}
Oui mais non ;) , à ce moment là tu définis des méthodes à chaques instanciations, tu ne bénéficies pas de la chaines des prototypes de JavaScript.
Le principe des prototypes en JS, c'est que lors de l'appel d'une méthode sur un objet, JS regarde si la méthode existe sur cet objet, puis sur le prototype de cet objet, puis sur le prototype parent, et ainsi de suite.

Ce qu'on lis la plupart du temps, c'est que JS n'est pas un language objet, mais un language prototype. Mais ces formulations permettent d'appliquer les principes objets sur ce langage. Y'a des pages très intéressantes sur MDC (chercher OOP javascript).

Bref, çà revient au même pour toi, tu définis le constructeur, puis le prototype à la suite, çà ressemblera quand même un peu à PHP ;) .

J'espère ne pas dire de bêtises...
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

décidement, je met pas de gâteaux de côté en ce moment :D ...
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités