117 votes

Comment faire pour que le favicon / l'icône soit défini lorsque le bookmarklet est glissé dans la barre d'outils ?

J'ai créé moi-même un bookmarklet, qui fonctionne très bien, mais lorsqu'il est ajouté à une barre d'outils dans Opera ou Firefox, il prend simplement l'icône de signet par défaut du navigateur (un globe et une étoile, respectivement). Mon site a un favicon, et la fenêtre, l'onglet et même le signet [site] utilisent le favicon que j'ai spécifié. Mais pas mon bookmarklet.

Comment puis-je coder mon site ou mon bookmarklet de manière à ce que le bookmarklet obtienne également la favicon ?

Je suis au courant des diverses techniques de piratage manuel que les utilisateurs peuvent utiliser pour définir la favicon après coup, mais ce sont des solutions indésirables.

0 votes

Exemple : Si l'on fait glisser le bookmarklet dans Opera, le bookmarklet prend l'apparence d'une icône Diigo : diigo.com/tools/diigolet

0 votes

Celui que tu as mis en lien ne le fait pas pour moi dans firefox.

0 votes

Oui, pas dans IE non plus. Mais il le fait dans Opera :)

23voto

Guss Points 6512

Un bookmarklet utilise le javascript:// et ne disposent donc pas d'un domaine à partir duquel une favicon peut être chargée.

Il n'y a donc actuellement aucun moyen de fournir un favicon pour un bookmarklet. Pensez-y de la manière suivante : vous vous souvenez de l'ensemble du bac à sable Javascript - où Javascript ne peut accéder à quoi que ce soit en dehors du domaine de la page Web où il est exécuté ? Eh bien, un bookmarklet qui doit être lié au domaine de la page en cours d'affichage ne peut pas être lié à un favicon sur votre propre site web.

Mise à jour : Selon la réponse de Hans Schmucker, il est possible de créer un bookmarklet qui, lorsqu'il est chargé par le navigateur dans le menu des signets, génère un document HTML contenant un favicon. Le raisonnement semble pouvoir fonctionner mais je n'ai pas encore vu quelque chose de ce genre en action et mes tests sont revenus négatifs.

0 votes

La disparition domain (par exemple, http-scheme) n'est pas la cause du bookmarklet sans icône. Vous pouvez ouvrir un fichier HTML local (c.-à-d. un schéma de fichier) que vous pouvez utiliser pour créer un signet sans icône. fournit une source lisible par le navigateur pour un favicon qui apparaîtra alors comme une icône dans le signet. Pourtant, cette image persistante hors ligne doit généralement être configuré manuellement pour la plupart des bookmarklets. Cela dépend de leur source

0 votes

@hc_dev - par "configuré manuellement" vous voulez dire quelque chose comme la réponse de monstro ? Alors oui, c'est une bonne solution, mais ce n'est pas ce que le PO a demandé. Le problème de la comparaison de la question du domaine avec un fichier HTML local est qu'un bookmarklet ne charge pas un fichier et qu'il n'y a pas d'autre document que le navigateur puisse charger. Si vous faites allusion aux réponses de Hans Schmucker (que j'ai mentionné) et Brian McAllister - alors oui, il y a un document, mais vous pouvez avoir soit un document, soit du javascript en cours d'exécution, mais pas les deux et l'icône, même si elle est définie (ce que je n'ai pas réussi à faire), n'est pas persistante.

13voto

Hans Schmucker Points 137

Ce n'est pas tout à fait exact : Un bookmarklet n'a pas de domaine, mais il a un emplacement (qui est le bookmarklet lui-même) et vous pouvez lui attribuer une icône. Après cela, tout dépend de la manière dont le navigateur enregistre les icônes (Firefox enregistre l'icône d'un marque-page de manière permanente, mais d'autres navigateurs n'ont pas cette chance).

P.S. La sécurité n'entre même pas en ligne de compte, les icônes peuvent provenir de n'importe où. Il n'y a aucune restriction.

Voir http://www.tapper-ware.net/blog/?p=97

3 votes

Bien que le raisonnement semble pouvoir fonctionner, les exemples fournis dans le blog dont vous avez donné le lien génèrent simplement un document avec une icône que Firefox peut ou non afficher pour le signet, ou sont en fait des bookmarklets qui exécutent du Javascript sur des pages arbitraires - mais pas les deux (testé sur Firefox 7). Je ne suis toujours pas convaincu que cela fonctionne.

13voto

Brian McAllister Points 139

Après avoir lu le site tapper[ware] et Restafarian, voici la solution la plus simple que j'ai pu trouver :

<a href="javascript:

var title = window.location.href;

if (title.indexOf('http://yourwebsite/bookmarklet/') == 0) {
    '<head><link rel=\'shortcut icon\' href=\'favicon.ico\'></head>Bookmarklet';
} else {
    (function(){document.body.appendChild(document.createElement('script')).src='http://yourwebsite/bookmarklet.js';})();
}">Click Me!</a>

Cela fonctionne très bien dans Chrome et FF, mais FF4 est le seul navigateur qui enregistre l'icône dans la barre de signets. Voici à quoi cela ressemble : http://cl.ly/5WNR

0 votes

J'essaie d'en savoir plus sur les bookmarklets, pourriez-vous expliquer un peu le code aux débutants ? Merci

0 votes

Bien sûr. Lorsque vous cliquez dessus, il vérifie l'URL de la page en cours. Si vous êtes sur la page où votre bookmarklet est "hébergé" (ligne 4), il écrit un élément de lien vers la page qui pointe vers la favicon que vous souhaitez. Votre navigateur le verra et téléchargera la favicon. Le navigateur le met en cache et l'utilise comme icône dans votre barre de signets. Si vous êtes sur une autre page, il fera simplement ce que votre bookmarklet est censé faire.

5 votes

Je ne comprends pas. Lorsque vous faites glisser un bookmarklet vers votre barre de favoris (comme on le fait avec le bookmarklet Delicious ici ) qui exécute ce code ? Je ne vois pas pourquoi il faudrait cliquer sur le bookmarklet (et exécuter le code) avant qu'il ne soit enregistré dans la barre des favoris, c'est-à-dire après que le navigateur ait choisi son icône ?

3voto

Arnaud Rinquin Points 2231

Il est possible d'attribuer et de modifier la favicon en utilisant javascript et canvas (voir l'étonnant jeu de favicon Défenseur de la Favicon ). Le code source du jeu vous aidera à le faire (il repose essentiellement sur l'utilisation de la fonction toDataUrl() sur le canevas, comme indiqué à la ligne 554 du code source).

// set favicon
if( !stupidBrowser && useIcon )
{
     var    icon=$('favicon');
     (newIcon = icon.cloneNode(true)).setAttribute('href',ctx.canvas.toDataURL());
     icon.parentNode.replaceChild(newIcon,icon);
}

Que se passe-t-il lorsque l'on clique ou enregistre un bookmarlet qui définit le favicon de cette manière ? Je ne sais pas mais ce serait bien de l'essayer. Le navigateur peut l'enregistrer ?

1 votes

(Testé dans Chrome) Pas de solution. Lorsque vous modifiez une favicon à l'aide d'un bookmarlet, vous êtes toujours au même endroit. Le navigateur peut changer l'icône d'un signet de la page en cours, mais il n'en attribuera pas une au bookmarlet.

1voto

StefanoCudini Points 375

Je pense qu'un moyen possible est d'utiliser unicode char dans l'ancrage du bookmarklet comme votre icône :

http://unicode-table.com/en/#cyrillic

en passant au crible tous les symboles possibles, vous pourriez trouver le caractère qui ressemble le plus à l'icône que vous voulez

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X