Crea segnalibri - Il modo giusto

I bookmark possono essere definiti come mini applicazioni mascherate da minuscoli frammenti di awesomen JavaScript che risiedono nel browser e forniscono funzionalità aggiuntive a una pagina Web.

Oggi, esamineremo la creazione di bookmarklets da zero e lungo la strada, alcune best practice da seguire.


Non sono per il nerd, anzi, sono piuttosto user-centric.

Siamo sempre alla ricerca di modi per migliorare la nostra esperienza di navigazione, diffusa o poco conosciuta. Bookmarklets, pensavo, apparteneva a quest'ultimo, il bastione dei super nerd. Con mio grande dispiacere, ho scoperto che avevo completamente torto sull'argomento. Non sono per i nerd, anzi, sono piuttosto incentrati sull'utente, implementano molte funzionalità abbastanza pulite e, proprio come le persone hanno previsto, sono diventate parte integrante del modo in cui interagisco con il browser - e Internet.

Oggi, vorrei guidarvi attraverso lo sviluppo di bookmarklets che implementano alcuni segnalibri eleganti. sì, segnalibri. Ne costruiremo più di uno, anche se piuttosto piccoli. Incuriosito? Iniziamo!


Quindi cosa sono esattamente i bookmark?

Per citare l'intro del mio articolo:

I bookmark possono essere definiti come mini applicazioni mascherate da minuscoli frammenti di meraviglia JavaScript che risiedono nel browser e forniscono funzionalità aggiuntive, con un semplice clic.

La parola stessa è una miscela, valigia per il pedante, delle parole segnalibro e applet. Chiamati anche favelet, questi piccoli frammenti di JavaScript ti permettono di evocare funzionalità aggiuntive per qualsiasi pagina che stai visitando.

Poiché sono costituiti solo da JavaScript, sono abbastanza portabili: sono supportati da tutti i browser su tutte le piattaforme, anche su cellulari e tablet. Installarli è semplice come trascinarli sulla loro barra degli strumenti!


Sì, ma qual è il punto?

Il punto è che i bookmarklet ti permettono di fare un sacco di cose che altrimenti sarebbero troppo incentrate sullo sviluppatore. Ogni funzionalità che si ottiene con un bookmarklet può essere duplicata utilizzando la console di un browser e un po 'di tempo. Bookmarklets semplifica semplicemente il processo - impacchettando il codice che implementa alcune funzionalità all'interno di un piccolo pulsante pulito.

I bookmark possono essere categorizzati in una serie di categorie:

  • Quelli che trasmettono dati I segnalibri che inviano una pagina a un servizio rientrano in questa categoria. I bookmark che si occupano di social media, ricerche di dizionari, ricerche rientrano tutti in questa categoria. Ne costruiremo uno che si sottomette a Reddit.
  • Quelli che ottengono informazioni e / o modificano la pagina corrente. Creeremo un bookmarklet che imposta il colore di sfondo di una pagina.
  • Quelli che lavorano dietro le quinte. Un bookmarklet che cancella tutti i cookie del sito corrente è un ottimo esempio e uno che costruiremo.

# 1 - Introduzione

Il primo punto che devi ricordare è prefisso tutto il codice JavaScript con il javascript URI. I browser hanno implementato questo prefisso specifico in modo che il contenuto da esso seguito possa essere trattato e analizzato come codice JavaScript appropriato.

Ad esempio, facendo clic su questo link - vedi il suo codice qui sotto - avviserà un testo.

 Linky

# 2 - Utilizzare una funzione anonima come wrapper

Ricorda che il tuo codice verrà eseguito contro la pagina attualmente caricata, una pagina che probabilmente avrà JavaScript e tutte le collisioni risultanti che implica. L'ultima cosa di cui hai bisogno è che il bookmarklet interrompa la pagina corrente.

Accompagnando ordinatamente il codice all'interno di una funzione anonima ci si assicurerà che non ci siano zero conflitti di nomi. Inoltre, i noob di JavaScript saranno sconcertati e penseranno che tu sia un dio, se ti piace questo genere di cose.

javascript: (function () // your code here) ();

Questo è pertinente quando usi JavaScript anche altrove. Sempre, sempre isolare il tuo codice.


# 3 - Esternalizza, se necessario

Un bookmarklet non deve necessariamente essere piccolo, sei libero di andare grande quanto vuoi. In questi casi, nell'interesse della distribuzione e mantenendo il tuo codice aggiornato senza l'intervento manuale dell'utente, è meglio creare un wrapper che inserisca il codice secondo necessità.

 javascript: (function () var jsCode = document.createElement ('script'); jsCode.setAttribute ('src', 'http: //path/to/external/file.js'); document.body.appendChild ( jsCode); ());

Questo è praticamente ciò che fa il codice precedente: crea un elemento script, imposta l'origine su un file ospitato altrove e infine lo aggiunge al documento. In questo modo, ogni volta che una parte del codice cambia, è possibile distribuire le modifiche a una singola fonte e farla immediatamente propagare a tutti gli utenti.

Nota: Non sei limitato a farlo solo per JavaScript. Se il tuo bookmarklet fa uso di un front-end, sei libero di estrarre esternamente anche HTML e CSS, rendendo il tuo bookmarklet davvero autoaggiornante.


# 4 - Fare attenzione quando si aggiunge una libreria

Di nuovo, se stai costruendo un mostro di un bookmarklet, potresti avere bisogno di una di quelle librerie JavaScript. Ma usarli nella tua pagina non è semplice come includerlo semplicemente - devi assicurarti che le librerie non siano già disponibili. Librerie come jQuery e MooTools dominano il mercato e faresti bene per assicurarti che non sia già caricato.

Un altro problema è che la pagina potrebbe aver caricato un'altra libreria che potrebbe portare a conflitti sul controllo del simbolo $. Le collisioni di versione possono anche entrare in gioco ad un certo punto, quindi tienilo a mente.

Ecco una shell veloce per il codice che generalmente uso. Ricorda, nel tuo codice di produzione, dovrai tenere conto dei problemi che ho menzionato sopra.

 if (! ($ = window.jQuery)) // typeof jQuery == 'undefined' funziona troppo script = document.createElement ('script'); script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; script.onload = releasetheKraken; document.body.appendChild (sceneggiatura);  else releasetheKraken ();  function releasetheKraken () // Il Kraken è stato rilasciato, master! // Sì, sono infantile. Inserisci qui il tuo codice

Il codice dovrebbe essere abbastanza auto esplicativo. Corriamo comunque velocemente.

  • Per prima cosa, determiniamo se jQuery è caricato controllando se l'oggetto jQuery esiste nello spazio dei nomi.
  • In caso contrario, lo prepariamo rapidamente per l'inclusione. Seguiamo le best practice e le carichiamo da un CDN. Infine assicurati di puntare alla funzione principale contenente il codice da eseguire.
  • Se è già incluso, esegui semplicemente la funzione wrapper principale.

Se stai cercando di evitare tutto questo fastidio, consiglio vivamente l'eccellente generatore di bookmarklet di Ben Alman. Si prende cura dei conflitti di namespace e versioning in modo molto pulito. Roba buona!


# 5 - Non rovinare la pagina padre, a meno che non sia necessario

I segnalibri sono inutili se, involontariamente, rompono una pagina.

Non posso sottolineare abbastanza questo punto. I segnalibri sono inutili se, involontariamente, rompono una pagina. E preoccuparsi di JavaScript non è l'unica cosa che devi affrontare.

Se hai un front-end, anche l'HTML e il CSS entrano in gioco. Non assegnare i tuoi contenitori e classi nomi generici: se lo chiami 'contenitore', avrai il mio eterno odio per sempre.

Un modo semplice è prefisso [o suffisso, non mi interessa] tutto con una stringa specifica di bookmarklet. E quando scrivi il tuo CSS, sii molto, molto specifico. Fare uso di cascading è bello ma usarlo con estrema precisione. Disporre di stili sulla pagina principale è irregolare e non evoca la fiducia.


# 6 - Test, Test, Test

Se stai creando un bookmarklet più piccolo, uno in cui includere una libreria di terze parti sembra inutile, ti imbatterai in un demone sempre presente - compatibilità cross-browser.

Potrebbe sembrare abbastanza ovvio ma è qualcosa che molte persone dimenticano, molte volte. Assicurati di testare tutti i browser su quante più piattaforme possibili.

Un'altra facile trappola in cui cadere è un bookmarklet che ha lo scopo di funzionare su tutti i siti che funzionano solo in modo selettivo. Le pagine possono avere gerarchie diverse e utilizzare diverse metodologie. Alcuni siti possono includere HTML5 e utilizzare i contenitori correlati mentre altri possono giocare sicuri e utilizzare div generici. Durante l'estrazione di informazioni, assicurati di tenere conto di ogni scuola di sviluppo.


And Off We Go

Ora che abbiamo esaminato alcuni punti da tenere presenti durante lo sviluppo, costruiremo i tre bookmarklet di cui ho parlato in precedenza, uno appartenente a ciascuna categoria.

  • Un bookmarket che invia a Reddit
  • Un bookmarket che cancella i cookie del sito Web corrente
  • Un bookmarklet che cambia il colore di sfondo di una pagina

Se hai già familiarità con JavaScript di base, il codice seguente dovrebbe essere un gioco da ragazzi-- sono solo alcune righe di codice! I bookmarklets qui sotto sono stati con me già da un po 'di tempo e non riesco a scoprire dove li ho visti in origine. Se lo fai, lasciami una breve nota nei commenti e aggiungerò i crediti di conseguenza.


Bookmarklet n. 1 - Invia a Reddit

Inizieremo con uno molto semplice - presentandoti a un servizio esterno, Reddit nel nostro caso.

 javascript: location.href = 'http: //www.reddit.com/submit? url =' + encodeURIComponent (location.href) + '& title =' + encodeURIComponent (document.title)

Questa è una cosa abbastanza semplice, presa direttamente dal sito. Nessun wrapper anonimo o namespacing poiché la funzionalità è piuttosto limitata.

Quando viene richiamato il bookmarklet, si verifica quanto segue, nell'ordine logico:

  • Il titolo e l'URL della pagina vengono acquisiti utilizzando location.href e titolo del documento
  • Per assicurarci che nessun personaggio illegale si intrufoli, lo codifichiamo usando il encodeURIComponent metodo
  • Infine, concateniamo tutto per ottenere il nostro URL e modificare la posizione della pagina

Questo modello funziona praticamente per la maggior parte degli scopi di ricerca e presentazione. L'unica variabile qui sarebbe l'URL che invii: ogni applicazione ha un approccio diverso. Sotto un minuto di ricerca dovresti vederti.

Ad esempio, un bookmarklet di convalida sarà simile a questo:

 javascript: location.href = 'http:? //validator.w3.org/check uri =' + encodeURIComponent (location.href)

Si noti che abbiamo semplicemente scartato il titolo della pagina e modificato la struttura dell'URL per puntare al servizio di validazione W3.


Bookmarklet # 2 - Cambia lo sfondo di una pagina

 javascript: void (document.bgColor = prompt ('Colore? Esadecimale o nome farà. Posso suggerire rosa?', 'rosa'))

Questo è semplice come sembra. Per mantenere le cose semplicissime, ho deciso di non introdurre variabili e validazioni. Vedremo solo il codice principale.

  • Prima su, creiamo un prompt che chiede all'utente un colore per impostare lo sfondo. Dal momento che non stiamo controllando l'input, sto facendo affidamento su di te non essere cattivo.
  • Finalmente, impostiamo lo sfondo per il colore scelto attraverso document.bgcolor. Questo è tutto!

Si lo so bgColor è deprecato e sì, so che dovrei sentirmi sporco, ma questo andrà abbastanza bene da quando un rapido test sui browser moderni è uscito positivo.

Puoi giocare con questi un po '. Questo è simile al modo in cui generalmente si applica lo stile CSS agli elementi tramite JavaScript. Lo stiamo solo applicando a pagine arbitrarie. Prendi nota del fatto che le diverse pagine hanno strutture diverse, quindi se la pagina ha un contenitore completo, l'effetto potrebbe essere privo di significato. In questi casi, potrebbe essere necessario cercare il contenitore principale e quindi applicare lo stile su di esso.


Bookmarklet # 3 - Clearing cookies

 javascript: function () var c = document.cookie.split (";"); per (var i = 0; i-? 1 c [i] .substr (0, e): c [i]; document.cookie = n + "=; expires = Gio, 01 gen 1970 00:00:00 GMT";  ()

Non è così complicato come sembra - i cookie hanno solo una sintassi molto rigida, quindi dovremo analizzarli passo dopo passo. Passiamo attraverso il codice:

  • Dividi document.cookie basato su punti e virgola. c ora diventa una matrice contenente tutti i cookie impostati per il dominio corrente.
  • Passa attraverso l'array.
  • Verifica se il cookie contiene il simbolo uguale al simbolo, ad esempio se un valore del cookie è stato impostato e restituito
  • Se sì, cattureremo tutte le informazioni solo fino a questo. In caso contrario, lascia che il cookie sia così com'è
  • Infine, aggiungi un valore stringa che svuota il valore del cookie insieme alla definizione di una data di scadenza del passato, cancellandola in modo efficace

Ricorda che i bookmarklets funzionano ancora sotto la pagina, quindi non puoi accedere ai cookie da altri domini. Sei limitato alla pagina su cui invochi il bookmarklet.


È un involucro

E abbiamo finito. Ricorda, abbiamo semplicemente graffiato la superficie dei bookmarklets. Molti di loro sono applicazioni complete al loro interno, con un front-end adeguato per l'avvio. Ci vuole un sacco di tempo e pianificazione per costruire, proprio come qualsiasi applicazione non banale. Questo era semplicemente per mettere il piede nella porta dello sviluppo del bookmarklet. Spero che tu abbia trovato questo tutorial interessante e questo ti è stato utile.

Domande? Belle cose da dire? Critiche? Colpisci la sezione dei commenti e lasciami un commento. Grazie mille per la lettura!