Come impostare una favicon / icona quando il bookmarklet viene trascinato sulla barra degli strumenti?


108

Mi sono creato un bookmarklet e funziona perfettamente, ma quando viene aggiunto a una barra degli strumenti in Opera o Firefox, assume solo l'icona del segnalibro predefinito per il browser (rispettivamente un globo e una stella). Il mio sito ha una favicon e la finestra, la scheda e persino il segnalibro [sito] usano la favicon che ho specificato. Solo non il mio bookmarklet.

Come posso codificare il mio sito o bookmarklet in modo che anche il bookmarklet riceva la favicon?

Sono a conoscenza di varie tecniche di hackery manuale che gli utenti possono utilizzare per impostare la favicon dopo il fatto, ma queste sono soluzioni indesiderabili.


Esempio: trascinando il bookmarklet in Opera, il bookmarklet assume un'icona Diigo: diigo.com/tools/diigolet
Pistos

quello a cui ti colleghi non lo fa per me in Firefox.
benlumley,

Sì, nemmeno in IE. Ma lo fa in Opera. :)
Pistos

Mi dispiace, ho appena provato Opear 9.6 e non funziona neanche per me in Opera.
Guss

1
C'è una proposta per una soluzione qui: wiki.whatwg.org/wiki/Link_Icons
lapo

Risposte:


23

Un bookmarklet utilizza lo javascript://schema e quindi non ha un dominio da cui caricare una favicon.

Quindi, attualmente non è possibile fornire una favicon per un bookmarklet. Pensala in questo modo: ricordi l'intera faccenda della sandbox Javascript - dove Javascript potrebbe non accedere a nulla al di fuori del dominio della pagina web in cui è in esecuzione? Bene, un bookmarklet che deve essere collegato a qualsiasi dominio per la pagina corrente che stai guardando, non può essere anche legato a una favicon sul tuo sito web.

Aggiornamento: secondo la risposta di Hans Schmucker, esiste la possibilità di creare un bookmarklet che quando caricato dal browser nel menu dei segnalibri genererà un documento HTML con una favicon. Il ragionamento sembra che possa funzionare, ma devo ancora vedere qualcosa di simile in azione e i miei test sono risultati negativi.


17

Ecco come puoi farlo:

  1. Trascina il bookmarklet nella barra dei segnalibri.
  2. Accanto ad esso crea un segnalibro di un sito che preferisci utilizzare per il tuo bookmarklet.
  3. Apri Gestione segnalibri, fai clic su Organizza menu a discesa e seleziona Esporta, salva i segnalibri come file html.
  4. Apri quel file html nell'editor di testo.
  5. Trova il segnalibro che hai appena creato, diciamo il suo segnalibro di Gmail, dovresti avere un codice html per esso, che assomiglia a questo:

<DT><A HREF="http://mail.google.com/mail/u/0/#inbox" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABV0lEQVQ4jdWQzUoCYRiFnxl/0plso0IKX7mqXWCLIlq0qEW4d19Qi6BLCELwEgpvQbyAVrroCrSNUJFGAyrkEEEMNs5PCxtRHGsZneX7nedwzgd/LQngObfnykIQOj9Disd/BFxdZ3hVwtE0Mje3kuw9OJqGWSji1BtzYafeGHk0jTdzCIA8aXANA/O6hFWuzMBWuYJ5XcI1DF6MAY8fxmxAYHdnZK7WMAtFXF3H1XXMQhGrWsN2XR5WM/QGn2MmOBkQOj5CFoJhuTKe5DUzbJvW1jbWZhbqd/4BAIGDfSQhGH7XBehLMlruEGlFzEyTZy6AvL5G+PICWQja6iJaPu8L+zbw9B4MYpyeEB4MkF7782z+AZ1OD0WNkk4vA7AUi/HUav8eYNsOnW6XZCJBJLIwvieTcVQ1SrN5j2XbUwFTf9DpdkmnUlOwJ0VRyGY3UBVl7px/qi+cdYQvZvKCUwAAAABJRU5ErkJggg==">Gmail</A>

  1. Copia l'intero tag ICON
  2. Nello stesso file trova il bookmarklet che hai creato e inserisci il tag ICON che hai copiato nel tag del tuo bookmarklet :

<DT><A HREF="javascript:(function(){... bookmarklet JS code...})();" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABV0lEQVQ4jdWQzUoCYRiFnxl/0plso0IKX7mqXWCLIlq0qEW4d19Qi6BLCELwEgpvQbyAVrroCrSNUJFGAyrkEEEMNs5PCxtRHGsZneX7nedwzgd/LQngObfnykIQOj9Disd/BFxdZ3hVwtE0Mje3kuw9OJqGWSji1BtzYafeGHk0jTdzCIA8aXANA/O6hFWuzMBWuYJ5XcI1DF6MAY8fxmxAYHdnZK7WMAtFXF3H1XXMQhGrWsN2XR5WM/QGn2MmOBkQOj5CFoJhuTKe5DUzbJvW1jbWZhbqd/4BAIGDfSQhGH7XBehLMlruEGlFzEyTZy6AvL5G+PICWQja6iJaPu8L+zbw9B4MYpyeEB4MkF7782z+AZ1OD0WNkk4vA7AUi/HUav8eYNsOnW6XZCJBJLIwvieTcVQ1SrN5j2XbUwFTf9DpdkmnUlOwJ0VRyGY3UBVl7px/qi+cdYQvZvKCUwAAAABJRU5ErkJggg==">MyBookmarklet</A>

  1. Salva questo file
  2. Torna a Chrom Bookmarks Manager, fai di nuovo clic su Organizza e seleziona Importa
  3. Importa il file HTML che hai appena modificato, il tuo bookmarklet ora ha una favicon .

Fondamentalmente la procedura è ottenere l'attributo ICON di un tag bookmark e inserirlo nel tag bookmarklet

inserisci qui la descrizione dell'immagine


1
(Questa è una domanda molto vecchia, ma ...) Stavo cercando una soluzione che non richiedesse alcuna azione da parte dell'utente finale (a parte l'aggiunta del bookmarklet alla barra degli strumenti). cioè cosa può fare il proprietario di un sito per specificare l'icona.
Pistos

1
Per me questa è la risposta migliore. Funziona ed è spiegato in modo esauriente. Grazie mille.
tsuma534

13

Non è del tutto corretto: un bookmarklet non ha dominio, ma ha una posizione (che è il bookmarklet stesso) e puoi assegnarvi un'icona. Dopo di che è una questione di come il browser salva le icone (Firefox salva l'icona di un segnalibro in modo permanente, potresti non essere così fortunato con altri browser).

PS Security non ci gioca nemmeno, le icone possono provenire da qualsiasi luogo. Non ci sono restrizioni.

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


3
Mentre il ragionamento sembra che potrebbe funzionare, gli esempi forniti nel blog a cui hai collegato generano semplicemente un documento con un'icona che Firefox può o non può mostrare per il segnalibro, o sono in realtà bookmarklet che eseguono Javascript su pagine arbitrarie, ma non entrambi (testati su Firefox 7). Non sono ancora convinto di questo lavoro.
Guss

13

Dopo aver letto il tapper [ware] e il sito Restafarian, ecco la soluzione più semplice che ho potuto trovare:

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

Funziona alla grande in Chrome e FF, ma FF4 è l'unico browser che salverà l'icona nella barra dei preferiti. Ecco come appare: http://cl.ly/5WNR


Sto cercando di saperne di più sui bookmarklet, potresti spiegare un po 'il codice ai neofiti? Grazie
Andrew Mackenzie

Sicuro. Quando fai clic su di esso, controlla l'URL della pagina corrente. Se sei sulla pagina in cui è "ospitato" il tuo bookmarklet (riga 4), scrive un elemento di collegamento alla pagina che punta alla favicon desiderata. Il tuo browser lo vedrà e scaricherà la favicon. Il browser lo memorizza nella cache e lo utilizza l'icona nella barra dei preferiti. Se ti trovi su qualsiasi altra pagina, farà semplicemente quello che dovrebbe fare il tuo bookmarklet.
Brian McAllister

5
Non ho capito. Quando trascini un bookmarklet nella barra dei preferiti (come si fa con il Delicious bookmarklet qui ) cosa esegue questo codice? Non vedo perché il bookmarklet verrebbe cliccato (e il codice eseguito) fino a quando non viene salvato nella barra dei preferiti, cioè dopo che il browser si è posizionato sulla sua icona?
Silente

6

Ecco una bella tecnica che fa quasi quello che vuoi. 🙅

Funziona alla grande sul mio Mac✅, ma non sono riuscito a farlo funzionare su Windows 7⃣.❌

Usa "Emoji" 🈳. Sono caratteri Unicode, che sembrano anche icone colorate. Puoi solo scegliere da un elenco predefinito di immagini, ma in realtà non è male - se tutto ciò che stai cercando di fare è dare all'utente qualcosa da guardare - per ricordare loro cosa fa il bookmarklet.

Ad esempio, sto creando un bookmarklet "chiave di sicurezza". Quindi uso 🔑 nel nome del mio bookmarklet! 😃😊

Quindi in pratica vedi l'immagine 🎑 nella barra dei segnalibri 😝

Usa questo sito per trovare un'emoji che funzioni per il tuo bookmarklet: http://emojipedia.org/symbols/


1
Ho appena ricevuto un sacco di segni "il carattere non ha glifo per questo punto di codice". Dato che sto usando Firefox su Linux, ciò significa che il comportamento di fallback non è stato nemmeno in grado di trovarli in nessun carattere sul sistema. Ho ragione nel supporre che quelli siano i glifi emoji specifici per Mac che i blogger hanno detto ai web designer di evitare?
ssokolow

Sì. Tuttavia, se sai che il tuo client è in esecuzione su un computer in grado di visualizzare emoji, è così brutto visualizzarli? Per il mio uso personale, permetterò agli utenti di decidere se vogliono emettere emoji o meno. In caso contrario, non ne produco alcuno, ottengono solo testo normale.
Theo

A parte il fatto che sia una soluzione che potrebbe inciampare su innumerevoli fallimenti nel web designer che la utilizza, non rischierei la brutta impressione che potrei fare quando (non se) qualcuno inevitabilmente carica qualcosa che costruisco su un sistema non Mac.
ssokolow

Migliorando questo in parte per scopi pratici e in parte per il valore di intrattenimento. Gli emoji sono la risposta a tutti i problemi della vita!
Sridhar Sarnobat

Suggerimento: usa questo sito per copiare e incollare gli emoji che ti servono: emojipedia.org/upwards-black-arrow .
Sridhar Sarnobat

4

In base al suggerimento di Wizek puoi inserire il tuo codice in un data-uri.

data:text/html;charset=utf-8,
<html>
<link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico">
<script type="text/javascript">
    alert('It works!')
</script></html>

E salva tutto come un segnalibro. ( Provalo! Trascina il codice nella barra delle schede)

Purtroppo funziona solo per alcuni casi (più sotto).

Come funziona:

(Almeno in Chrome) È simile a un bookmarklet che utilizza il formato javascript: "<html>...your html code here, including a javascript tag that will run when loaded...</html>"suggerito da altre soluzioni. In tal caso, l'html della pagina in cui ti trovi verrà sostituito dall'html del bookmarklet, ma la posizione rimane la stessa e il bookmarklet stesso non avrà ancora una posizione, quindi Chrome non può salvare una favicon per esso.

Al contrario, con un segnalibro data-uri andiamo all'altra pagina , ha la sua posizione e il browser può salvare una favicon per essa. Consideralo come "Ospitare un sito Web nel tuo browser", a cui potresti accedere da altri computer se sincronizzi i tuoi segnalibri. Puoi anche usare un'immagine base64 per la favicon invece di un URL se vuoi mantenere tutto in locale.

Ha dei limiti.

  • Quando fai clic su di esso, lascia la pagina corrente e carica la pagina nel file dati . Quindi non potrai usarlo per bookmarlet che interagiscono con la pagina corrente, solo per codice che puoi eseguire in una pagina diversa.

  • Non utilizzare // per i commenti. Dal momento che verrà salvato tutto in una riga, racchiudili in / ** / e non dimenticare i punti e virgola

  • In FF ha salvato la favicon, ma non sono stato in grado di impostarlo per aprire sempre le finestre popup se voglio usare window.open () perché non mi permette di salvare un comportamento predefinito per gli URL di dati


Come esempio:

Usando questa tecnica ho creato un piccolo Bookmarklet con Icon Generator. Puoi trascinare questo codice nella barra degli URL (o salvarlo come segnalibro) per usarlo. È una semplice pagina con un'area di input per il codice e per un'icona, quindi genera un bookmarklet con l'icona

data:text/html;charset=utf-8,<html><head>
    <title>Bookmarklet With Icon Generator</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
    <link rel="shortcut icon" href="https://www.freefavicon.com/freefavicons/objects/plain-thumbs-up-152-237293.png">
</head>
<body>
    <div class="container">
        <div class="page-header">
            <h2>Write your javascript  and specify a favicon, then drag the button to your bookmarks bar</div>
                </h2>
        <a id="bookmarkbutton" href='' ondragend='this.click()' draggable="true" class="btn btn-primary btn-lg" role="button"> 
            Drag me to your bookmarks bar! </a><br /><br />
        <div> 
            <label for="fav_href">Favicon:</label>
            <input id="fav_href" value='https://stackoverflow.com/favicon.ico' style='width:100%'></input> </div><br />
        <div>
            <label for='ta'>Write your JavaScript below</label>
            <textarea id="ta" style="width:100%;height:50%">
setTimeout(()=>{            &%2313
    alert('hello world');   /*Use this format for comments, use %2523 instead of hash (number sign)*/ &%2313
    window.history.back();  &%2313
},200);
            </textarea></div>
  </div>
    <script type = "text/javascript">
        fav_href.onchange = ta.onchange = function(){
            bookmarkbutton.href = 'data:text/html;charset=utf-8,<html><head>'+
                '<link rel="shortcut icon" href="'+ fav_href.value +'">'+
                '<script type="text/javascript"> '+ ta.value +'<\/script>';
            };
        ta.onchange();
    </script>
</body>

Un altro esempio: Bookmarklet per aprire Facebook Messenger nella sua piccola finestra (potrebbe non funzionare se il tuo browser blocca i popup per impostazione predefinita)

data:text/html;charset=utf-8,
<html>
    <link rel="shortcut icon" href="https://facebook.com/images/messengerdotcom/favicon/favicon.ico">
    <script type="text/javascript">
        url = 'https://www.messenger.com/';
        w = 740; h = 700;
        x = parseInt( screen.availWidth/2 - w/2 );
        y = parseInt( screen.availHeight/2 - h/2 );
        nw = window.open(url,'', 'width='+ w +',height='+ h +',top='+ y +',left='+ x);
        nw.focus();
        setTimeout(()=>{ 
          window.history.back();
          window.close();  
        },200);
    </script>

Altre soluzioni alternative di Chrome per ottenere le icone dei bookmarklet:

  • Esportare la barra dei segnalibri, modificarla e importarla di nuovo, come descritto in questa risposta /superuser/212722/how-can-i-add-a-favicon-to-a-bookmarklet-in- Google Chrome

  • Trasformare il bookmarklet in un'estensione. Non sarà più un bookmarklet, ma avrà la stessa funzione. Ecco un semplice sito Web che lo fa per te http://sandbox.self.li/bookmarklet-to-extension/ quindi cambia semplicemente il file dell'icona in quello che desideri. Lo svantaggio di questo è che le estensioni utilizzano fino a RAM (circa 10 MB per quelle semplici?), Se hai molta e poca RAM potrebbe non essere la soluzione per te. Inoltre, non avrai testo come in un segnalibro, solo l'icona.


1
Funziona solo per Chrome e Safari. Non Mozilla, sfortunatamente. L'intenzione di un bookmarklet è di essere cross browser, IMO.
sijpkes

Questa è l'unica cosa che ha funzionato. Santo cielo, grazie mille.
Alex Beals

3

È possibile assegnare e modificare la favicon utilizzando javascript e canvas (vedere il fantastico gioco favicon Defender of the Favicon ). Il codice sorgente del gioco ti aiuterà a farlo (fondamentalmente si basa sull'uso della funzione toDataUrl () su tela come si vede nella riga 554 del sorgente).

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

Cosa succede quando un bookmarlet che imposta la favicon in questo modo viene cliccato o salvato? Non lo so, ma potrebbe essere carino provarlo. Il browser può salvarlo?


1
(Testato in Chrome) Nessuna soluzione. Quando modifichi una favicon utilizzando un bookmarlet, ti trovi ancora nella stessa posizione. Il browser potrebbe cambiare l'icona di un segnalibro della pagina corrente, ma non ne assegnerà uno al bookmarlet.
aljgom

1

Penso che un modo possibile sia usare il carattere unicode nell'ancora del bookmarklet come la tua icona:

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

spulciando tra tutti i possibili simboli potresti trovare il personaggio che somiglia di più all'icona che desideri


1

Quindi, questa non è ancora una soluzione completa, ma potrebbe essere un passo verso una direzione operativa.

data:la codifica di un'icona in un data:html codificato in -uri funziona, con mia sorpresa.

data:text/html;charset=utf-8, <title>Separator Tab</title><link rel="shortcut icon" href="data:image/png;base64,AAABAAEAEBAAAAEAIAAoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /> Separator Tab

Dato che questo è <html>, possiamo correre<script type="javascript"> anche lì.

Per alcuni bookmarklet questo potrebbe già essere più che sufficiente. Per altri che vorrebbero modificare la pagina corrente o almeno ottenere alcune informazioni da essa prima di aprire una nuova scheda, sfortuna ancora. Aggiornerò questa risposta se trovo un modo per farlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.