Aggiunta di favicon a javascript Bookmarklet (utilizza window.open)

Ho un bookmarklet che lancia una function window.open javascript per aprire una piccola window con il mio bookmarklet – una funzionalità esterna utilizzata per comunicare tra qualsiasi sito visted e il mio server. Mi piacerebbe che una favicon venga visualizzata quando il bookmarklet viene aggiunto alla barra degli strumenti del bookmark. Mi rendo conto che il bookmarklet è javascript, non esiste un dominio legato ad esso, quindi sarà difficile o imansible raggiungere questo objective.

La mia comprensione del problema:

I Favicons sono facili da capire, un collegamento all'interno della testa di un documento HTML. Il browser può tirare questo quando segnalibro un sito effettivo per riferimento. Tuttavia, come vede il mio bookmarklet è scappato un codice di lancio javascript in cui non esiste HTML, pertanto nessun collegamento a un favicon . Non sono ancora pronto a rinunciare, ma ritengo che ci sia qualche iniezione che possa essere fatta …

A questo punto, il codice di avvio del bookmarklet è simile a questo:

Script corrente – bookmarklet, nessun favicon (nota che tutto il codice è formato con interruzioni di row – non funziona in tutti i browser, normalmente una linea)

javascript:void(window.open( 'http://mydomain.com/bookmarklet/form?u=' +encodeURIComponent(location.href)+ 't='+encodeURIComponent(document.title), 'test','status=0,toolbar=0,location=0,menubar=0, resizable=false,scrollbars=false,height=379,width=379' )); 

La cosa più vicina che ho trovato a una soluzione è il seguente, ma non apre una nuova window: crea una nuova scheda con l'html come pagina:

Favicon di lavoro, nessuna window del bookmarklet

 javascript:'<!DOCTYPE html> <html><head> <title>Hello World</title> <link rel="icon" type="image/png" href="http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png" /> </head> <body>Hello World</body> </html>'; 

Ho provato una combinazione dei due, ma non sembrava usare l'icona. Sarò curioso di sapere se qualcuno può vedere un tipo di soluzione. Penso che potrebbe essere ansible, non credo che sia impostato correttamente come ho provato.

Il mio ibrido del bookmarklet due, ma non favicon

 javascript:'<!DOCTYPE html> <html><head> <title>Hello World</title> <link rel="icon" type="image/png" href="http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png" /> </head><body>Hello World</body></html>'; window.open('http://mydomain.com/bookmarklet/form?u=' +encodeURIComponent(location.href)+ '&t='+encodeURIComponent(document.title), 'test', 'status=0,toolbar=0,location=0,menubar=0,resizable=false, scrollbars=false,height=379,width=379').void(0); 

Quello che ho fatto è stato usare la struttura html prima di sparare window.open (), questo ha aperto con successo il mio bookmarklet in una nuova window, ma nessun favicon si è presentato per l'icona del bookmark.


Soluzione logica:

I miei pensieri su questo sarebbe quello di avere il bookmarklet puntare a una pagina che è semplicemente un file HTML con un link favicon e lo script di lancio nella <head> . Tuttavia, non voglio che questa apertura in una nuova scheda con un file HTML vuoto che poi lancia un popup .. Soluzione ..?


Esiste una domanda simile, ma non ho trovato la risposta che cerco:

Come impostare l'opzione favicon / icona quando il bookmarklet viene trascinato nella barra degli strumenti?

Fonte per il favicon di javascript funzionante (tuttavia nessun bookmarklet):

Scarica il file utilizzando Javascript / jQuery

Mi piacerebbe interessarmi in quali sarebbero le vostre conoscenze / pensieri attuali

Alcune delle cose che ho provato che potrebbe forse farti andare un po 'di più:

Aggiungi un nuovo elemento di collegamento al documento corrente:

 javascript: var newLink = document.createElement('link'); newLink.setAttribute('rel','icon'); newLink.setAttribute('type','image/png'); newLink.setAttribute('href','http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png'); document.querySelector('head').appendChild(newLink); void(0); 

Notare che stavo usando la querySelector dovuta al test di IE (anche se funziona anche nei browser moderni). Con Chrome e FF, ho continuato a get un carattere non valido quando provavo a creare l'elemento, quindi ho dovuto fare un set di attributi in parte.

Provato a utilizzare la string di immagini codificata base64 utilizzando lo schema URI di "data: image / png; base64, iVBORw0KGgoAAAA …", ma ciò non ha aiutato nulla a causa del fatto che wherevo ancora impostarlo sul text HTML corrente Potrei fare, ma ho incontrato lo stesso problema che hai sopra di nessun bookmarklet).

Forse questo non può essere fatto a causa di problemi di scripting cross site? Non so … In entrambi i casi, veramente curioso di vedere cosa si presenta (se riesci a trovare qualcosa).

Ho provato e riprovato, e la mia prima conclusione è stata: "Non può essere fatto (alless non in FF4 su Ubuntu 11.04)". Hai bisogno (credo) una soluzione semplice per i visitatori del tuo sito (drag & drop, aggiungi il segnalibro con un click …).

Ho trovato una soluzione, è il lavoro, ma è un po 'buggy (forse qualcuno può aiutare a risolvere il problema).
PROFESSIONISTI:

  • aggiungere un'icona al bookmarklet
  • utilizza windows.open
  • non lascia le pagine vuote dietro

CONS:

  • ricarica la pagina corrente (invece di lasciare una pagina dietro)
  • Imansible fare bloccare Firefox POP-ul bloccare la pagina HTML generata "javascript:" per caricare POP-up, quindi è necessario colpire each volta

Questo è il codice:

<a href="javascript:'&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png&quot; /&gt;&lt;/head&gt;&lt;body onLoad=&quot;window.open(\'http://example.com',\'test\',\'status=0,toolbar=0,location=0,menubar=0,resizable=false,scrollbars=false,height=379,width=379\');setTimeout(\'history.back(-1);\',100);&quot;&gt;&lt;/body&gt;&lt;/html&gt;';">Bookmarklet</a>

Questo è un collegamento che hai inserito nella tua pagina, l'utente deve trascinare questo link alla barra dei segnalibri (puoi utilizzare qualcosa come Add Bookmark Script per aggiungerlo come segnalibro con un solo click), il bookmark non ha alcuna icona finché l'utente fare clic su alless una volta.

Quindi come si suppone di lavorare:
1. redirect l'utente alla pagina HTML generata dal bookmarklet (che rende ansible l' ICON )
2. onLoad aprire la window necessaria usando " windows.open "
3. redirect la pagina indietro usando " history.back (-1) "

In teoria, sempre, accade così velocemente, che l'utente non visualizza la nuova pagina, solo che la pagina corrente sta ricaricando e si visualizzano nuove windows.

Il problema:
1. Utilizzo setTimeout per history.back beacause window.open è bloccato da Firefox, quindi devo fare clic su each singola volta (se qualcuno può risolvere questo … abbiamo la possibilità di utilizzare questo, svilupparlo ulteriormente :))

So che questa non è una soluzione affidabile, ma questa è l'unica soluzione che ho finora.

Spero che questo aiuti un po '. 🙂

"Non voglio che questa apertura in una nuova scheda con un file HTML vuoto che poi lancia un popup .. Soluzione ..?"

Se quello che dopo è veramente l'effetto visivo, puoi provare a lanciare l'HTML vuoto in iframe nascosto, quindi lanciare il javascript.

Spero possa aiutare

Questo potrebbe non essere la soluzione desiderata, specialmente se non si utilizza Firefox, ma utilizzo un componente aggiuntivo denominato Bookmark Favicon Changer per impostare l'icona nei miei segnalibri e funziona ottimamente.