Création d'un CustumButton

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
Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Création d'un CustumButton

Message par Phil Btz »

Bonjour,
En suivant les conseils donnés ICI je me suis créé un bouton personnalisé.
Aucun souci, nickel.
Le problème commence dans le code ... :cry:

J'ai repris le JavaScript que j'avais dans un marque page pour enlever les redirections (Le marque-page marche nickel aussi).

Mais mon bouton lui, ne veut rien faire :roll:

Voici le code

Code : Tout sélectionner

CustomButton = {

1: function ()
  {
	alert("Avant function");
	var k,x,t,i,j;
	for (k=0; x=document.links[k]; k++)
	{
		t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');
		i=t.lastIndexOf('http://');
		if(i>0)
		{
			t=t.substring(i);
			j=t.indexOf('&');
			if(j>0)t=t.substring(0,j);
			x.href=unescape(t);
		}
		else
			if (x.onmouseover&&x.onmouseout)
			{
				x.onmouseover();
				if (window.status.indexOf('://')!=-1)x.href=window.status;
				x.onmouseout(); 
			}
		x.onmouseover=null;
		x.onmouseout=null; 
	}
	alert("Apres function");
  },

}
Le "Avant function" s'affiche bien, mais après... :?:
Le "Apres function" ne s'affiche jamais et les redirections sont toujours là :roll:

Merci de vos remarques pour résoudre mon problème :idea:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2

[Edit] Je pense que ce sujet serais plus à sa place dans Développement d'applications Gecko.
Désolé si un admin peut le bouger. Merci

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Message par Phil Btz »

Aucun spécialiste du JavaScript n'est passé par là :cry:
Au cas ou, je met le code d'origine de mon marque page, c'est peut être en le recopiant que j'ai fait une erreur.

Code : Tout sélectionner

javascript:(function(){var k,x,t,i,j; for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http://');if(i>0){t=t.substring(i);j=t.indexOf('&');if(j>0)t=t.substring(0,j);x.href=unescape(t)} else if (x.onmouseover&&x.onmouseout){x.onmouseover(); if (window.status.indexOf('://')!=-1)x.href=window.status; x.onmouseout(); } x.onmouseover=null; x.onmouseout=null; }})();
Merci d'avance de vos commentaires.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

Phil Btz a écrit :Aucun spécialiste du JavaScript n'est passé par là :cry:
Si si, mais il faut comprendre ce que tu fais. Je déduis que tu veux transformer un "bookmarklet" en script pour l'affecter à un bouton ?

Il faudrait connaître également les erreurs de ta console javascript.
Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Message par Phil Btz »

Tu as déduis parfaitement :lol:
La console d'erreurs ne dis absolument rien :roll:


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

Pas d'erreurs, tout fonctionne bien, mais le second message ne s'affiche pas :?: :!: Je ne vois pas trop, à moins de modifier un peu ta boucle for() pour faire quelques tests.

Tu peux également configurer ton profil pour utiliser la fonction dump() et afficher tous les messages d'erreurs : xulfr.org - configurer Mozilla pour développer. Par exemple :

Code : Tout sélectionner

user_pref("nglayout.debug.disable_xul_cache", true); // désactive le cache XUL
 user_pref("nglayout.debug.disable_xul_fastload", true); // lié au précédent, facultatif
 user_pref("javascript.options.strict", true); // active l'affichage de toutes les erreurs d'exécutions
 user_pref("javascript.options.showInConsole", true); // active l'affichage de toutes les erreurs de syntaxe
 user_pref("browser.dom.window.dump.enabled", true); // active le dump sur la console
Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Message par Phil Btz »

chBok a écrit :Pas d'erreurs, tout fonctionne bien, mais le second message ne s'affiche pas :?: :!:
Tout fonctionne bien ? au niveau du code tu veux dire ou au niveau de l'exécution ? Car chez moi il n'enlève pas les redirections :roll:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Message par Phil Btz »

Bonjour,
je fais remonter le sujet parce que j'ai un peu plus d'explication :wink:
voici le code un peu modifié...

Code : Tout sélectionner

CustomButton = {

1: function ()
  {
    var k, x, t, i, j;
    alert("AVANT for");
    for (k = 0; x = document.links[k]; k++) {
      t = x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');
      i = t.lastIndexOf('http://');
      if (i > 0) {
         t = t.substring(i);
         j = t.indexOf('&');
         if ( j >0) {
           t = t.substring(0,j);
         }
         x.href=unescape(t);
      } else if (x.onmouseover&&x.onmouseout) {
            x.onmouseover();
            if (window.status.indexOf('://')!=-1) {
              x.href=window.status;
            }
            x.onmouseout();
        }
      x.onmouseover=null;
      x.onmouseout=null;
   }
   alert("APRES for");
  },

}
La console d'erreurs me dit :
Avertissements :
reference to undefined property document.links
Erreurs :
document.links has no properties :shock:

pourtant ma ligne

Code : Tout sélectionner

for (k = 0; x = document.links[k]; k++) {
a l'air tout à fait correct et marche dans le "bookmarklet"
Si quelqu'un a une idée, merci d'avance
chBok... si tu passes par là :lol:
Merci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

arno. sans ses cookies

Message par arno. sans ses cookies »

Phil Btz a écrit :
document.links has no properties
Eh oui:
si tu as un script qui s'exécute dans le contexte d'une page web, document représente le document web (page html par exemple). Mais si il s'exécute dans le contexte de la fenêtre browser firefox, document représente ton browser firefox en fait.

Pour accèder au document de web contenu dans l'onglet courant, tu peux essayer : getBrowser().contentDocument (ce qui donne donc: getBrowser().contentDocument.links)
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

Merci arno, je crois que je n'aurais pas mieux expliqué :D

C'est en effet une question de contexte. Ton bouton se trouve sur l'interface utilisateur de Firefox, il faut donc en effet récupérer le document de la page Web situé dans l'onglet ouvert courant (comme l'a expliqué arno).

Pense à te servir de l'inspecteur DOM pour comprendre. Au passage, getBrowser()est une fonction existante dans le code source de Firefox, mais elle représente en fait document.getElementById("content");
Phil Btz
Lézard vert
Messages : 170
Inscription : 31 oct. 2003, 11:45

Message par Phil Btz »

Merci à vous deux pour vos réponses :lol:
Avec ce code la boucle for marche

Code : Tout sélectionner

   for (k = 0; x = window.getBrowser().contentDocument.links[k]; k++) {
MAIS... (il faut toujours un mais) :roll:
maintenant ça plante sur toutes les instructions x.onmouseover et out avec :

Code : Tout sélectionner

Erreur : uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"
location: "JS frame :: chrome://custombutton/content/button.js :: anonymous :: line 17"  data: no]
C'est grave docteur :?:

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

Windows 7 au bureau - Kubuntu 24.04 à la maison
FireFox 115.13.0 esr - ThunderBird 115.12.2

Répondre

Qui est en ligne ?

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