Gedeelde modules zijn verzamelingen bronnen zonder toestemming die kunnen worden gedeeld tussen andere extensies en apps. Veelvoorkomende toepassingen van gedeelde modules zijn:
- Als API. U kunt een gedeelde module distribueren die HTML, JS en andere bronnen kan leveren om een API te bieden die onafhankelijk van de extensies die ervan afhankelijk zijn, kan worden bijgewerkt. Dit kan handig zijn voor runtimes en game-engines, waarbij apps vaak kleinere hoeveelheden gegevens zijn die op de code van de gedeelde module worden uitgevoerd.
- Als downloadoptimalisatie. De gedeelde module bevat algemene bronnen die door veel extensies worden gebruikt. Het wordt één keer gedownload, de eerste keer dat een afhankelijke extensie wordt geïnstalleerd.
Manifest
Gedeelde modules worden gebruikt via twee manifestvelden : exporteren en importeren.
Het exportveld geeft aan dat een extensie een gedeelde module is die zijn bronnen exporteert:
{
"version": "1.0",
"name": "My Shared Module",
"export": {
// Optional list of extension IDs explicitly allowed to
// import this Shared Module's resources. If no allowlist
// is given, all extensions are allowed to import it.
"allowlist": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
]
}
// Note: no permissions are allowed in Shared Modules
}
Het importveld wordt door extensies en apps gebruikt om aan te geven dat ze afhankelijk zijn van de bronnen van bepaalde gedeelde modules:
{
"version": "1.0",
"name": "My Importing Extension",
...
"import": [
{"id": "cccccccccccccccccccccccccccccccc"},
{"id": "dddddddddddddddddddddddddddddddd"
"minimum_version": "0.5" // optional
},
]
}
Toegang tot bronnen
Gedeelde modulebronnen zijn toegankelijk via een gereserveerd pad _modules/SHARED_MODULE_ID in de hoofdmap van uw importerende extensie. Als u bijvoorbeeld het script 'foo.js' uit een gedeelde module met ID 'cccccccccccccccccccccccccccccccc' wilt opnemen, gebruikt u dit pad vanaf de hoofdmap van uw extensie:
<script src="_modules/cccccccccccccccccccccccccccccccc/foo.js">
Als de importerende extensie de ID "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" heeft, dan is de volledige URL naar bronnen in de gedeelde module:
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/_modules/cccccccccccccccccccccccccccccccc/
Houd er rekening mee dat, aangezien bronnen uit gedeelde modules over de oorsprong van de importerende extensie heen liggen, alle bevoegdheden die aan de importerende extensie zijn verleend, beschikbaar zijn voor code in gedeelde modules. Ook heeft de gedeelde module toegang tot bronnen in de importerende extensie door absolute paden te gebruiken.
Installeren / verwijderen
Een gedeelde module wordt automatisch geïnstalleerd vanuit de Chrome Web Store wanneer een afhankelijke extensie dit nodig heeft, en automatisch verwijderd wanneer de laatste extensie die ernaar verwijst, wordt verwijderd. Als u een extensie wilt uploaden die gebruikmaakt van een gedeelde module, moet de gedeelde module worden gepubliceerd in de Chrome Web Store en mag de extensie niet worden beperkt in het gebruik van de gedeelde module op basis van de toelatingslijst.
Tijdens de ontwikkeling moet u alle gedeelde modules die uw extensie gebruikt handmatig installeren. Automatische installaties vinden niet plaats voor extensies die side-loaded zijn of geladen zijn als uitgepakte extensies. Voor lokaal geïnstalleerde, uitgepakte gedeelde modules moet u het sleutelveld gebruiken om ervoor te zorgen dat de gedeelde modules de juiste ID's gebruiken.