Pisanje jednostavne Google Chrome ekstenzije [Vodič]

Pisanje jednostavne Google Chrome ekstenzije [Vodič]

offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12405

Da ne smaram mnogo - Hteo sam neku mogućnost na nekom sajtu i dok sam pisao feedback administratorima, setim se da mogu i sam da napišem ekstenziju koja će mi omogućiti to što želim.

Uopšte nisam bio upoznat sa procesom do pre 15-tak minuta, pa je ovo više "smuti pa prospi" fazon.
Ispostavilo se da nije preteško.

Join in Wink

'K, ako bacimo pogled na zvanični tutorijal za pisanje ekstenzija za GC : [Link mogu videti samo ulogovani korisnici]

Vidimo da nam je ključan fajl u celoj priči manifest.json.
Ovaj fajl sadrži sve informacije koje su presudne za našu ekstenziju.

Mi ćemo napisati ekstenziju koja će se automatski aktivirati čim korisnik poseti neku stranicu a cilj te ekstenzije je da promeni vrednost nekog postojećeg elementa.

Neka nam MyCity forum bude zamorče.
Hajde da naziv svakog foruma promenimo u velika slova i na kraju dodamo uzvičnik.

Napravimo manifest.json i prekopiramo sledeće :

{  "manifest_version": 2,   "name": "MC Enlarger",   "description": "This extension changes size of forum titles",   "version": "1.0",   "content_scripts": [     {       "matches": ["http://www.mycity.rs/*"],        "js": ["mcEnlarge.js"]     }   ],   "permissions": [     "activeTab"   ] }

Dakle, vidimo neke osnove koje su jasne same po sebi :
Naziv ekstenzije
Opis ekstenzije
Verziju ekstenzije

Zatim vidimo sekciju "content_scripts".
Kako se naš kod izvršava automatski po učitavanju stranice i menja sadržaj, treba nam taj tip skripte.
Tamo imamo referencu ka sajtu na kom želimo da se aktiviraju skripte i referencu ka samoj skripti.
To je trenutno mcEnlarge.js.

Sačuvajte fajl kao manifest.json u novi folder koji možete imenovati po želji.

U tom istom folderu napravite tekst fajl i promenite naziv i esktenziju u : mcEnlarge.js

Otvorite fajl u bilo kom editoru teksta ili IDE-u.

Ako pogledamo source MyCity stranica, vidimo da nazivi foruma koriste klasu "forumtitle".



Hajde prvo da pokupimo sve elemente koji koriste tu klasu, u skripti pišemo prvu liniju :

var forumTitles = document.getElementsByClassName("forumtitle");

Zatim želimo da prođemo kroz svaki unos forumTitles-a i da mu modifikujemo innerHTML.

for (var i = 0; i < forumTitles.length; i++) {     var currTitle = forumTitles[i].innerHTML;     forumTitles[i].innerHTML = currTitle.toUpperCase() + " !"; }

Prvo sačuvamo vrednost innerHTML-a u promenljivoj currTitle, zatim kao vrednost innerHTML-a trenutne stavke dodelimo istu tu vrednost koju smo sačuvali, samo što je ovog puta provučemo kroz toUpperCase() i dodamo uzvičnik na kraju. To se isto ponavlja za svaku stavku koju smo ranije pronašli.



Otvorimo Settings > Extensions > Developer Mode (check) > Load Unpacked Extension > Izaberite folder sa json i js fajlovima.

Ukoliko ste ispratili uputstva lepo, sada imate novu ekstenziju koju smo upravo napisali u listi ekstenzija.



Hajde da je testiramo Very Happy

U novom tabu otvorite bilo koji deo MyCity foruma i videćete da su naslovi foruma napisani velikim slovima i imaju znak uzvika na kraju.



p.s. i teme koriste istu tu klasu, sada sam video Mr. Green

Uglavnom, vidite da nije uopšte teško modifikovati sadržaj na postojećim stranicama.
Isto tako nije teško dodati nove elemente u DOM, kako sam video.

Meni je ovo svakako postalo interesantno sada još više, pa ću možda da posvetim malo vremena nekim jednostavnijim ekstenzijama.

Ziveli

Source :

[Link mogu videti samo ulogovani korisnici]

[Link mogu videti samo ulogovani korisnici]


Dopuna: Prvobitno napisano januara 2016. godine



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

Ovo je odlično. Nikad do sada nisam učio js, ali si me zainteresovao sa ekstenzijama pa ću se malo bolje upoznati sa njim.
Koliko je slično pisanje ekstenzija u Operi i u Chrome-u? Ja koristim Operu i trebće mi ekstenzije za nju.
Koliko sam primetio dosta je slično.



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4576

^ Obzirom da je Opera od verzije 15 bazirana na Chromium projektu, pisanje ekstenzija ne bi trebalo da se po bilo čemu razlikuje tj. ekstenzije koje rade u Chrome-u će bez problema raditi i u Operi.

Evo još nekih korisnih informacija:

- Postoje dve vrste prikaza: browserAction i pageAction. Proširenje koje se radi sa browserAction će biti prikazano sve vreme u vidu ikonice sa strane pored podešavanja, a pageAction (koje sam ja koristio) prikazuje ikonicu u adress bar-u pod određenim uslovima. Evo primera:

"page_action": {      "default_icon": "icon16.png",      "default_popup": "manager.html",      "default_title": "Kliknite za pregled" }

- Sadržajne skripte su skup svih skripti preko kojih omogućujete interakciju sa proširenjem i web stranicom na kojoj se pokreće (ja sam recimo koristio event handler-e koji bi pri određenoj akciji slali podatke u IndexedDB bazu podataka).

- Popup prozor je oblačić koji se prikazuje kada kliknete na ikonicu proširenja - on može da sadrži informacije, ali i da prikuplja podatke sa udaljenog servera preko XMLHttpRequest.

- U proširenju možete da imate više ikonica različitih veličina (što je i preporučljivo) i da ih sve obuhvatite odjednom:

"default_icon" : {      "32": "icon32.png",      "48": "icon48.png",      "128": "icon128.png" }

Exclamation Kada pakujete proširenje gledajte da sačuvate .pem fajl u kom se nalazi privatni ključ - ukoliko ga izgubite nećete moći više da ažurirate proširenje!

Ziveli

Ko je trenutno na forumu
 

Ukupno su 1125 korisnika na forumu :: 109 registrovanih, 11 sakrivenih i 1005 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 100ka, 357magnum, A.R.Chafee.Jr., AK - 230, AndrejPetar, Arsenije, Atomski čoban, Avalon015, awathorn, babaroga, Bickoooo, Bobrock1, bojank, bolenbgd, Boris BM, boromir, Botovac, Brot, bukefal, burevestnik, Cirkon, cvrle312, Czrweni, dac445, DeerHunter, deLacy, Dioniss, Doca, Dogma21, Dorcolac, Dovla 1980, elias, EXIT78, FOX, Frunze, GveX, hvost, Igritelj, ikan, ILGromovnik, Ir, Jaz, Jeremiah, Jonbonjovi, kn19, Kobrim, Kubovac, kunktator, ladro, Limeni91, Lj_ubo, ljubo70, LostInSpaceandTime, Lucije Kvint, Macalone, Marko Marković, Marko1238, mercedesamg, Mercury, miki kv, Milan A. Nikolic, monomah, Murko, museum, N.e.m.a.nj.a., narandzasti, nevjerna beba, niksa517, NMNJ, Nobunaga, operniki, Orc, Orijen, perko91, PlayerOne, PrincipL, proka89, Raso75, Ripanjac, robertino, Rocky I, samo opusteno, sasakrajina, savaskytec, Sirius, Srle993, stegonosa, Sterilizacija, Stoorb, tajvankanasta, tamno.nebo, tanakadzo, Tanasko, ujke, vathra, Velizar Laro, vjetar, Vlada1389, W123, Wehicle, Zeljo980, ZetaMan, zgoljo, zoran-ruma, Zrcalo, zvomar, Đole64, 3987, 800077