Als u hier geen antwoord op uw vraag kunt vinden, probeer dan de veelgestelde vragen over de Chrome Web Store , de tag [google-chrome-extension] op Stack Overflow , de groep chrome-extensions of de help van de winkel .
Algemeen
Wat zijn Google Chrome-extensies?
Google Chrome-extensies zijn applicaties die in de Chrome-browser worden uitgevoerd en extra functionaliteit, integratie met websites of services van derden en aangepaste browse-ervaringen bieden.
Hoe kan ik Chrome instellen voor de ontwikkeling van extensies?
Zolang je een versie van Chrome gebruikt die extensies ondersteunt, heb je al alles wat je nodig hebt om een eigen extensie te schrijven. U kunt beginnen door de ontwikkelaarsmodus in te schakelen.
Klik op het Chrome-menupictogram en selecteer Extensies in het menu Extra . Zorg ervoor dat het selectievakje 'Ontwikkelaarsmodus' in de rechterbovenhoek is aangevinkt. Nu kunt u extensies opnieuw laden, een uitgepakte map met bestanden laden alsof het een verpakte extensie is, en meer. Zie Aan de slag voor een volledige zelfstudie.
Welke technologieën worden gebruikt om extensies voor Chrome te schrijven?
Extensies worden geschreven met behulp van dezelfde standaardwebtechnologieën die ontwikkelaars gebruiken om websites te maken. HTML wordt gebruikt als opmaaktaal voor inhoud, CSS wordt gebruikt voor styling en JavaScript voor scripting. Omdat Chrome HTML5 en CSS3 ondersteunt, kunnen ontwikkelaars de nieuwste open webtechnologieën zoals canvas- en CSS-animaties in hun extensies gebruiken. Extensies hebben ook toegang tot verschillende JavaScript-API's die helpen bij het uitvoeren van functies zoals JSON-codering en interactie met de browser.
Worden extensies elke keer dat de browser wordt geladen van internet opgehaald?
Extensies worden tijdens de installatie door de Chrome-browser gedownload en vervolgens vanaf de lokale schijf uitgevoerd om de prestaties te versnellen. Als er echter een nieuwe versie van de extensie online wordt gepusht, wordt deze automatisch op de achtergrond gedownload voor alle gebruikers die de extensie hebben geïnstalleerd. Extensies kunnen ook op elk moment verzoeken indienen voor inhoud op afstand, om te communiceren met een webservice of om nieuwe inhoud van internet te halen.
Hoe bepaal ik welke versie van Chrome op welk kanaal wordt geïmplementeerd?
Ga naar omahaproxy.appspot.com om te bepalen welke versie van Chrome momenteel beschikbaar is op elk van de verschillende platforms. Op die site ziet u gegevens in een formaat dat lijkt op:
cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
Elke regel vertegenwoordigt informatie over een ander platform en een andere kanaalcombinatie. De vermelde platforms zijn cf
(Google Chrome Frame), linux
, mac
, win
en cros
(Google ChromeOS). De vermelde kanalen zijn canary
, dev
, beta
en stable
. De twee vierdelige cijfers na het kanaal vertegenwoordigen de huidige en eerdere versies van Chrome die voor die platform-kanaalcombinatie zijn geïmplementeerd. De rest van de informatie bestaat uit metagegevens over wanneer de releases voor het eerst zijn gepusht, evenals revisienummers die aan elke build zijn gekoppeld.
Mogelijkheden
Kunnen extensies Ajax-verzoeken over meerdere domeinen doen?
Ja. Extensies kunnen cross-domein verzoeken doen. Zie deze pagina voor meer informatie.
Kunnen extensies webservices van derden gebruiken?
Ja. Extensies zijn in staat om cross-domein Ajax-verzoeken te doen, zodat ze externe API's rechtstreeks kunnen aanroepen. API's die gegevens in JSON-formaat leveren, zijn bijzonder eenvoudig te gebruiken.
Kunnen extensies JSON-gegevens coderen/decoderen?
Ja, omdat V8 (de JavaScript-engine van Chrome) JSON.stringify en JSON.parse native ondersteunt, kunt u deze functies in uw extensies gebruiken zoals hier beschreven, zonder aanvullende JSON-bibliotheken in uw code op te nemen.
Kunnen extensies gegevens lokaal opslaan?
Ja, extensies kunnen localStorage gebruiken om tekenreeksgegevens permanent op te slaan. Met behulp van de ingebouwde JSON-functies van Chrome kunt u complexe datastructuren opslaan in localStorage. Voor extensies die SQL-query's moeten uitvoeren op hun opgeslagen gegevens, implementeert Chrome SQL-databases aan de clientzijde , die ook kunnen worden gebruikt.
Kunnen extensies OAuth gebruiken?
Ja, er zijn extensies die OAuth gebruiken om toegang te krijgen tot externe gegevens-API's. De meeste ontwikkelaars vinden het handig om een JavaScript OAuth-bibliotheek te gebruiken om het proces van het ondertekenen van OAuth-verzoeken te vereenvoudigen.
Kunnen extensies een gebruikersinterface creëren buiten de weergegeven webpagina?
Ja, uw extensie kan knoppen toevoegen aan de gebruikersinterface van de Chrome-browser. Zie browseracties en paginaacties voor meer informatie.
Een extensie kan ook pop-upmeldingen creëren, die buiten het browservenster bestaan. Zie de documentatie over bureaubladmeldingen voor meer details.
Kunnen extensies luisteren naar klikken op Chrome-tabbladen en navigatieknoppen?
Nee. Extensies zijn beperkt tot het luisteren naar de gebeurtenissen die worden beschreven in de API-documentatie .
Kunnen twee extensies met elkaar communiceren?
Ja, extensies kunnen berichten doorgeven aan andere extensies. Zie de documentatie voor het doorgeven van berichten voor meer informatie.
Kunnen extensies Google Analytics gebruiken?
Ja, aangezien extensies net als websites zijn gebouwd, kunnen ze Google Analytics gebruiken om het gebruik bij te houden. U moet echter de trackingcode aanpassen om een HTTPS-versie van de Google Analytics-bibliotheek op te halen. Zie deze tutorial voor meer informatie over hoe u dit doet.
Kunnen extensies chrome://-URL's wijzigen?
Nee. De extensie-API's zijn ontworpen om achterwaartse compatibiliteitsproblemen te minimaliseren die kunnen optreden wanneer nieuwe versies van de browser worden gepusht. Het toestaan van inhoudsscripts op chrome://
URL's zou betekenen dat ontwikkelaars erop zouden vertrouwen dat de DOM, CSS en JavaScript van deze pagina's hetzelfde blijven. In het beste geval zouden deze pagina's niet zo snel kunnen worden bijgewerkt als nu. In het ergste geval zou dit kunnen betekenen dat een update van een van deze pagina's ertoe kan leiden dat een extensie kapot gaat, waardoor belangrijke delen van de browser niet meer werken voor gebruikers van die extensie.
De reden dat het volledig vervangen van de inhoud die op deze URL's wordt gehost, is toegestaan, is omdat het een extensie-ontwikkelaar dwingt alle functionaliteit te implementeren die hij wil, zonder afhankelijk te zijn van de interne implementatie van de browser om hetzelfde te blijven.
Kunnen extensies browser-/paginaactiepop-ups openen zonder gebruikersinteractie?
Nee, pop-ups kunnen alleen worden geopend als de gebruiker op de bijbehorende pagina of browseractie klikt. Een extensie kan de pop-up niet programmatisch openen.
Kunnen extensies pop-ups openhouden nadat de gebruiker ervan wegklikt?
Nee, pop-ups sluiten automatisch wanneer de gebruiker zich op een deel van de browser buiten de pop-up concentreert. Er is geen manier om de pop-up open te houden nadat de gebruiker heeft weggeklikt.
Kunnen extensies op de hoogte worden gesteld wanneer ze worden geïnstalleerd/verwijderd?
U kunt naar de runtime.onInstalled- gebeurtenis luisteren om een melding te krijgen wanneer uw extensie wordt geïnstalleerd of bijgewerkt, of wanneer Chrome zelf wordt bijgewerkt. Er is geen overeenkomstige gebeurtenis voor wanneer uw extensie wordt verwijderd.
Ontwikkeling
Hoe bouw ik een gebruikersinterface voor mijn extensie?
Extensies gebruiken HTML en CSS om hun gebruikersinterfaces te definiëren, zodat u standaardformulierbesturingselementen kunt gebruiken om uw gebruikersinterface te bouwen, of de interface kunt opmaken met CSS, zoals u dat bij een webpagina zou doen. Bovendien kunnen extensies enkele beperkte UI-elementen aan Chrome zelf toevoegen.
Hoeveel gegevens kan ik opslaan in localStorage?
Extensies kunnen maximaal 5 MB aan gegevens opslaan in localStorage.
Hoe maak ik een optiemenu voor mijn toepassing?
U kunt gebruikers opties voor uw extensie laten instellen door een optiepagina te maken. Dit is een eenvoudige HTML-pagina die wordt geladen wanneer een gebruiker op de knop 'Opties' voor uw extensie klikt. Deze pagina kan instellingen lezen en schrijven naar localStorage, of zelfs opties naar een webserver sturen, zodat ze in alle browsers kunnen worden bewaard.
Welke foutopsporingstools zijn beschikbaar voor extensie-ontwikkelaars?
De ingebouwde ontwikkelaarstools van Chrome kunnen worden gebruikt om fouten in extensies en webpagina's op te sporen. Zie deze tutorial over het debuggen van extensies voor meer informatie.
Waarom werken jokertekens niet voor topniveaudomeinen (TLD's)?
U kunt geen jokertekenpatronen zoals http://google.*/*
gebruiken om TLD's (zoals http://google.es
en http://google.fr
) te matchen vanwege de complexiteit van het daadwerkelijk beperken van een dergelijke match tot alleen de gewenste domeinen.
Voor het voorbeeld van http://google.*/*
zouden de Google-domeinen overeenkomen, maar ook http://google.someotherdomain.com
. Bovendien bezitten veel sites niet alle TLD's voor hun domein. Stel bijvoorbeeld dat u http://example.*/*
wilt gebruiken om http://example.com
en http://example.es
te matchen, maar http://example.net
is een vijandige site. Als uw extensie een bug bevat, kan de vijandige site mogelijk uw extensie aanvallen om toegang te krijgen tot de verhoogde rechten van uw extensie.
U moet expliciet de TLD's vermelden waarop u uw extensie wilt uitvoeren.
Waarom activeert de beheer-API geen gebeurtenissen wanneer mijn extensie wordt geïnstalleerd/verwijderd?
De beheer-API was bedoeld om nieuwe extensies voor het vervangen van tabbladen te helpen maken. Het was niet de bedoeling om installatie-/verwijderingsgebeurtenissen voor de huidige extensie te activeren.
Hoe kan een extensie bepalen of deze voor de eerste keer wordt uitgevoerd?
U kunt luisteren naar de runtime.onInstalled- gebeurtenis. Zie dit item met veelgestelde vragen .
Functies en bugs
Ik denk dat ik een bug heb gevonden! Hoe zorg ik ervoor dat het wordt opgelost?
Tijdens het ontwikkelen van een extensie kunt u gedrag tegenkomen dat niet overeenkomt met de documentatie bij de extensies en dat het gevolg kan zijn van een bug in Chrome. Het beste wat u kunt doen, is ervoor zorgen dat er een passend probleemrapport wordt ingediend en dat het Chromium-team over voldoende informatie beschikt om het probleem te reproduceren.
De stappen die u moet volgen om dit te garanderen zijn:
- Bedenk een minimale testextensie die het probleem aantoont dat u wilt melden. Deze extensie zou zo weinig mogelijk code moeten bevatten om de bug aan te tonen. Over het algemeen zou dit 100 regels code of minder moeten zijn. Vaak merken ontwikkelaars dat ze hun problemen niet op deze manier kunnen reproduceren, wat een goede indicatie is dat de bug in hun eigen code zit.
- Zoek in de issue tracker op http://crbug.com om te zien of iemand een soortgelijk probleem heeft gemeld. De meeste problemen met betrekking tot extensies worden gearchiveerd onder component=Platform>Extensies , dus als u wilt zoeken naar een extensiefout die verband houdt met de functie chrome.tabs.executeScript (bijvoorbeeld), zoekt u naar "
component=Platform>Extensions Type=Bug chrome.tabs.executeScript
", waarmee u deze lijst met resultaten krijgt. - Als u een bug vindt die uw probleem beschrijft, klikt u op het sterpictogram om een melding te krijgen wanneer de bug een update ontvangt. Reageer niet op de bug door 'ik ook' te zeggen of te vragen 'wanneer wordt dit opgelost?' ; Dergelijke updates kunnen ertoe leiden dat honderden e-mails worden verzonden. Voeg alleen een opmerking toe als u informatie heeft (zoals een betere testcase of een voorgestelde oplossing) die waarschijnlijk nuttig kan zijn.
- Als u geen passende bug heeft gevonden die u de hoofdrol kunt geven, dient u een nieuw probleemrapport in op http://crbug.com/new . Wees zo expliciet mogelijk bij het invullen van dit formulier: kies een beschrijvende titel, leg de stappen uit om de bug te reproduceren en beschrijf het verwachte en feitelijke gedrag. Voeg uw testvoorbeeld toe aan het rapport en voeg eventueel screenshots toe. Hoe gemakkelijker uw rapport het voor anderen maakt om uw probleem te reproduceren, hoe groter de kans dat uw bug snel wordt opgelost.
- Wacht tot de bug is bijgewerkt. De meeste nieuwe bugs worden binnen een week onderzocht, hoewel het soms langer kan duren voordat er een update is. Reageer niet op de bug om te vragen wanneer het probleem zal worden opgelost. Als uw bug na twee weken nog niet is aangepast, plaats dan een bericht in de discussiegroep met een link naar uw bug.
- Als je je bug oorspronkelijk in de discussiegroep hebt gerapporteerd en naar dit FAQ-artikel bent doorverwezen, reageer dan op je oorspronkelijke thread met een link naar de bug die je hebt gemarkeerd of gerapporteerd. Dit maakt het gemakkelijker voor anderen die hetzelfde probleem ervaren om de juiste bug te vinden.
Ik heb een functieverzoek! Hoe kan ik het melden?
Als u een functie identificeert (vooral als deze verband houdt met een experimentele API) die kan worden toegevoegd om de ontwikkelingservaring voor extensies te verbeteren, zorg er dan voor dat er een passend verzoek wordt ingediend in de issuetracker.
De stappen die u moet volgen om dit te garanderen zijn:
- Zoek in de issue tracker op http://crbug.com om te zien of iemand om een soortgelijke functie heeft verzocht. De meeste verzoeken met betrekking tot extensies worden gearchiveerd onder component=Platform>Extensies , dus als u wilt zoeken naar een verzoek voor een uitbreidingsfunctie gerelateerd aan sneltoetsen (bijvoorbeeld), zoekt u naar "
component=Platform>Extensions Type=Feature shortcuts
", wat u dit zal geven lijst met resultaten . - Als u een ticket vindt dat aan uw verzoek voldoet, klikt u op het sterpictogram om een melding te krijgen wanneer de bug een update ontvangt. Reageer niet op de bug door 'ik ook' te zeggen of te vragen 'wanneer wordt dit geïmplementeerd?' ; Dergelijke updates kunnen ertoe leiden dat honderden e-mails worden verzonden.
- Als je geen geschikt ticket voor de hoofdrol hebt gevonden, dien dan een nieuw verzoek in op http://crbug.com/new . Wees zo gedetailleerd mogelijk bij het invullen van dit formulier: kies een beschrijvende titel en leg precies uit welke functie u wilt gebruiken en hoe u deze wilt gebruiken.
- Wacht tot het ticket is bijgewerkt. De meeste nieuwe verzoeken worden binnen een week beoordeeld, hoewel het soms langer kan duren voordat er een update is. Reageer niet op het ticket om te vragen wanneer de functie wordt toegevoegd. Als uw ticket na twee weken nog niet is gewijzigd, plaatst u dan een bericht in de discussiegroep met een link naar uw verzoek.
- Als u uw verzoek oorspronkelijk in de discussiegroep heeft gemeld en naar dit item met veelgestelde vragen bent doorverwezen, antwoord dan op uw oorspronkelijke thread met een link naar het ticket dat u met een ster heeft gemarkeerd of hebt geopend. Dit maakt het voor anderen met dezelfde aanvraag makkelijker om het juiste ticket te vinden.