Bladwijzers kunnen worden gedefinieerd als minitoepassingen die zich voordoen als minuscule JavaScript-fragmenten die zich in uw browser bevinden en extra functies bieden voor een webpagina.
Vandaag gaan we kijken naar het maken van bookmarks van nul af aan en onderweg enkele best practices volgen.
Ze zijn niet voor de nerd, in feite zijn ze behoorlijk gebruikersgericht.
We zijn altijd op zoek naar manieren om onze browse-ervaring te verbeteren, of dit nu wijdverspreid of weinig bekend is. Bookmarklets, ik dacht vroeger, behoorde tot de laatste - het bastion van supernerds. Tot mijn ergernis ontdekte ik dat ik het helemaal niet bij het rechte eind had. Ze zijn niet voor de nerd, in feite zijn ze behoorlijk user-centric, implementeren veel mooie nette functionaliteiten en, net zoals mensen voorspelden, het is een essentieel onderdeel geworden van de manier waarop ik met de browser communiceer - en de internet.
Vandaag wil ik je graag helpen bij het ontwikkelen van bookmarklets die handige bladwijzers implementeren. Ja, bladwijzers. We zullen meer dan één bouwen, zij het vrij kleine. Geïntrigeerd? Laten we beginnen!
Om mijn artikel intro te citeren:
Bladwijzers kunnen worden gedefinieerd als minitoepassingen die zich voordoen als minuscule JavaScript-fragmenten die zich in uw browser bevinden en extra functies bieden, met slechts één muisklik.
Het woord zelf is een blend, valies voor het pedant, van de woorden bladwijzer en applet. Deze kleine fragmenten van JavaScript, ook favelets genoemd, laten u extra functionaliteit oproepen voor elke pagina die u bezoekt.
Omdat ze alleen uit JavaScript bestaan, zijn ze behoorlijk draagbaar - ze worden door alle browsers op alle platforms ondersteund, zelfs op mobiele apparaten en tablets. Het installeren ervan is net zo eenvoudig als ze naar hun werkbalk slepen!
Het punt is dat bookmarklets je een heleboel dingen laten doen die anders te ontwikkelaargericht zijn om te bereiken. Elke functionaliteit die u krijgt met een bookmarklet kan gedupliceerd worden via een browserconsole en een beetje tijd. Bookmarklets vereenvoudigen het proces eenvoudig - het verpakken van de code die functionaliteit in een leuk knopje implementeert.
Bookmarklets kunnen grofweg worden onderverdeeld in een aantal categorieën:
Het eerste punt dat u moet onthouden, is om alle JavaScript-code bij de javascript
URI. Browsers hebben dit specifieke voorvoegsel geïmplementeerd, zodat de daaropvolgende inhoud kan worden behandeld en geparseerd als juiste JavaScript-code.
Door bijvoorbeeld op deze link te klikken - zie de code hieronder - wordt een melding weergegeven.
Linky
Houd er rekening mee dat uw code tegen de momenteel geladen pagina zal lopen - een pagina die waarschijnlijk een eigen JavaScript heeft en alle resulterende botsingen die dit met zich meebrengt. Het laatste dat je nodig hebt, is dat je bookmarklet de huidige pagina doorbreekt.
Als u uw code netjes in een anonieme functie verpakt, zorgt u ervoor dat er geen botsingen met namen worden genoemd. Bovendien zullen JavaScript-noobs worden geflunderd en zullen denken dat je een god bent, als je van dat soort dingen houdt.
javascript: (function () // uw code hier) ();
Dit is relevant wanneer u JavaScript ook elders gebruikt. Altijd, altijd isoleer uw code.
Een bookmarklet hoeft niet per se klein te zijn, je bent vrij om zo groot te gaan als je wilt. In die gevallen is het in het belang van distributie en het up-to-date houden van uw code zonder handmatige tussenkomst van de gebruiker, het beste om een wrapper te maken die de code naar binnen haalt.
javascript: (function () var jsCode = document.createElement ('script'); jsCode.setAttribute ('src', 'http: //path/to/external/file.js'); document.body.appendChild ( jsCode); ());
Dat is ongeveer wat de bovenstaande code doet: het maakt een scriptelement, stelt de bron in op een bestand dat elders wordt gehost en tenslotte voegt het toe aan het document. Op deze manier kunt u, telkens wanneer een deel van uw code verandert, uw wijzigingen in één enkele bron implementeren en deze direct laten doorgeven aan elke gebruiker.
Notitie: U bent niet beperkt tot dit alleen doen voor JavaScript. Als uw bookmarklet gebruikmaakt van een frontend, kunt u de HTML en CSS ook extern gebruiken, waardoor uw bookmarklet echt zelf wordt bijgewerkt.
Nogmaals, als je een kolos van een bookmarklet aan het bouwen bent, heb je misschien behoefte aan een van die JavaScript-bibliotheken. Maar het is niet zo eenvoudig om ze op uw pagina te gebruiken, maar u moet ervoor zorgen dat de bibliotheken nog niet beschikbaar zijn. Bibliotheken zoals jQuery en MooTools domineren de markt en u doet er goed aan om ervoor te zorgen dat deze nog niet is geladen.
Een ander probleem is dat de pagina mogelijk een andere bibliotheek heeft geladen, wat kan leiden tot conflicten over de besturing van het $ -symbool. Versiebotsingen kunnen op een bepaald moment ook van invloed zijn, houd daar dus ook rekening mee.
Hier is een snelle shell voor de code die ik over het algemeen gebruik. Houd er rekening mee dat u in uw productiecode rekening moet houden met de problemen die ik hierboven heb genoemd.
if (! ($ = window.jQuery)) // typeof jQuery == 'undefined' werkt te script = document.createElement ('script'); script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; script.onload = releasetheKraken; document.body.appendChild (script); else releasetheKraken (); function releasetheKraken () // The Kraken is vrijgegeven, meester! // Ja, ik ben kinderachtig. Plaats hier uw code
De code moet redelijk duidelijk zijn. Laten we er toch snel doorheen rennen.
Als je al dit gedoe wilt vermijden, raad ik de uitstekende bookmarklet-generator van Ben Alman van harte aan. Het zorgt op een zeer schone manier voor naamruimte- en versieconflicten. Goed spul!
Bladwijzers zijn nutteloos als ze onbedoeld een pagina doorbreken.
Ik kan dit punt niet genoeg benadrukken. Bladwijzers zijn nutteloos als ze onbedoeld een pagina doorbreken. En je zorgen maken over JavaScript is niet het enige waar je mee te maken hebt.
Als je een frontend hebt, spelen de HTML en CSS ook een rol. Wijs uw containers en klassen geen algemene namen toe - als u het 'container' noemt, zult u voor altijd mijn eeuwige haat hebben.
Een eenvoudige manier is om prefix [of achtervoegsel, ik vind het niet erg] alles met een specifieke string voor een bookmarklet. En als je je CSS schrijft, wees dan heel, heel specifiek. Gebruik maken van cascadering is leuk, maar gebruik het met uiterste precisie. Stijlen die naar de hoofdpagina lekken, zijn onregelmatig en wekken geen vertrouwen op.
Als u een kleinere bookmarklet aan het bouwen bent, waarbij het niet zinvol is om een bibliotheek van derden toe te voegen, zult u een altijd aanwezige demon-cross-browser compatibiliteit tegenkomen.
Het lijkt misschien nogal voor de hand liggend, maar dit is iets dat veel mensen vaak vergeten. Zorg ervoor dat u zoveel browsers op zoveel mogelijk platforms test.
Een andere gemakkelijke val om in te vallen is een bookmarklet die bedoeld is om te werken op alle sites die alleen selectief werken. Pagina's kunnen verschillende hiërarchieën hebben en gebruikmaken van verschillende methodologieën. Sommige sites kunnen HTML5 omarmen en de bijbehorende containers gebruiken, terwijl andere mogelijk veilig spelen en generieke div's gebruiken. Terwijl je mijnbouwt voor informatie, zorg er dan voor dat je rekening houdt met elke school van ontwikkeling.
Nu we enkele punten hebben bekeken om in gedachten te houden tijdens de ontwikkeling, gaan we de drie bookmarklets bouwen waar ik het eerder over had - een die tot elke categorie behoort.
Als u al vertrouwd bent met standaard JavaScript, zou de volgende code een makkie moeten zijn - het zijn maar een paar regels code! De onderstaande bladwijzers zijn al een hele tijd bij me en ik kan er niet achter komen waar ik ze oorspronkelijk zag. Als je dat doet, laat me een kort berichtje achter in de opmerkingen en ik voeg dienovereenkomstig credits toe.
We beginnen met een supereenvoudige oplossing - indienen bij een externe service, Reddit in ons geval.
javascript: location.href = 'http: //www.reddit.com/submit? url =' + encodeURIComponent (location.href) + '& title =' + encodeURIComponent (document.title)
Dit zijn een aantal vrij simpele dingen, rechtstreeks vanaf de site. Geen anonieme wrapper of namespacing omdat de functionaliteit vrij beperkt is.
Wanneer de bookmarklet wordt aangeroepen, gebeurt het volgende in logische volgorde:
location.href
en document titel
encodeURIComponent
methodeDit patroon werkt vrijwel voor de meeste zoek- en indieningsdoeleinden. De enige variabele hier is de URL die u verzendt - elke toepassing heeft een andere benadering. Onder een minuut zoeken moet je door.
Een validerende bookmarklet ziet er bijvoorbeeld zo uit:
javascript: location.href = 'http:? //validator.w3.org/check uri =' + encodeURIComponent (location.href)
Merk op dat we alleen de titel van de pagina hebben weggegooid en de URL-structuur zodanig hebben gewijzigd dat deze naar de W3-validatieservice verwijst.
javascript: void (document.bgColor = prompt ('Kleur? Hex of naam zal doen. Mag ik roze suggereren?', 'roze'))
Dit is net zo eenvoudig als het lijkt. Om dingen supereenvoudig te houden, heb ik ervoor gekozen om geen variabelen en validatie te introduceren. We zullen alleen naar de kerncode kijken.
document.bgColor
. Dat is het! Ja ik weet het bgColor
is verouderd en ja, ik weet dat ik me vies moet voelen, maar dit zal redelijk goed werken omdat een snelle test op moderne browsers positief uitpakte.
Je kunt hier redelijk wat mee spelen. Dit is vergelijkbaar met hoe je CSS-stijl in het algemeen zou toepassen op elementen via JavaScript. We passen het alleen toe op willekeurige pagina's. Merk op dat verschillende pagina's verschillende structuren hebben, dus als de pagina een volledige verpakkingscontainer heeft, is het effect mogelijk zinloos. In deze gevallen moet u mogelijk op de hoofdcontainer jagen en de styling daarop toepassen.
javascript: function () var c = document.cookie.split (";"); for (var i = 0; i-? 1 c [i] .substr (0, e): c [i]; document.cookie = n + "=; verloopt = Do, 01 Jan 1970 00:00:00 GMT"; ()
Niet zo ingewikkeld als het eruit ziet - cookies hebben slechts een zeer strikte syntaxis, dus we zullen het stap voor stap moeten analyseren. Laten we de code eens doorlopen:
c
wordt nu een array met alle cookies die zijn ingesteld voor het huidige domein.Vergeet niet dat bookmarklets nog steeds onder de pagina werken, zodat u geen toegang krijgt tot cookies van andere domeinen. U bent beperkt tot de pagina waarop u de bookmarklet aanroept.
En we zijn klaar. Bedenk dat we slechts het oppervlak van bookmarklets hebben bekrast. Veel van hen zijn complete applicaties binnen zichzelf, met een goede front-end om op te starten. Die nemen veel tijd in beslag en zijn van plan om te bouwen, net als elke niet-triviale toepassing. Dit was slechts om je voet tussen de deur te krijgen van de ontwikkeling van de bookmarklet. Hopelijk heb je deze tutorial interessant gevonden en dit was nuttig voor jou.
Vragen? Leuke dingen om te zeggen? Kritiek? Klik op het gedeelte Opmerkingen en laat een opmerking achter. Heel erg bedankt voor het lezen!