Page 1 sur 1
Création d'un CustumButton
Publié : 12 sept. 2006, 16:16
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 ...
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
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à
Merci de vos remarques pour résoudre mon problème
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
Publié : 13 sept. 2006, 11:22
par Phil Btz
Aucun spécialiste du JavaScript n'est passé par là
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
Publié : 13 sept. 2006, 13:53
par chBok
Phil Btz a écrit :Aucun spécialiste du JavaScript n'est passé par là

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.
Publié : 13 sept. 2006, 16:51
par Phil Btz
Tu as déduis parfaitement
La console d'erreurs ne dis absolument rien
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2
Publié : 15 sept. 2006, 10:05
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
Publié : 15 sept. 2006, 10:34
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
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2
Publié : 02 févr. 2007, 17:44
par Phil Btz
Bonjour,
je fais remonter le sujet parce que j'ai un peu plus d'explication
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
pourtant ma ligne
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à
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
Publié : 02 févr. 2007, 21:11
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)
Publié : 03 févr. 2007, 18:25
par chBok
Merci arno, je crois que je n'aurais pas mieux expliqué
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");
Publié : 05 févr. 2007, 11:07
par Phil Btz
Merci à vous deux pour vos réponses
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)
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