Réinjecter les scripts de contenu : une étape nécessaire après une mise à niveau ou une installation d'une extension Chrome
P粉066224086
2023-08-24 12:03:01
<p>Après l'installation ou la mise à niveau d'une extension Chrome que je développe, le script de contenu (spécifié dans le manifeste) n'est pas réinjecté, une actualisation de la page est donc nécessaire pour que l'extension fonctionne correctement. Existe-t-il un moyen de forcer la réinjection du script ? </p>
<p>Je pense que je pourrais les réinjecter en les supprimant par programme du manifeste, puis en traitant la page à injecter dans une page d'arrière-plan, mais ce n'est pas une bonne solution. </p>
<p>Je ne souhaite pas actualiser automatiquement les onglets de l'utilisateur car cela pourrait entraîner une perte de données. Safari actualise automatiquement toutes les pages lorsqu'une extension est installée ou mise à niveau. </p>
La seule façon de forcer l'injection d'un script de contenu sans actualiser la page est l'injection programmatique.
Vous pouvez utiliser l'API Tags de Chrome pour obtenir toutes vos balises et y injecter du code. Par exemple, vous pouvez stocker un numéro de version dans le stockage local et chaque fois que vous vérifiez si le numéro de version dans la page d'arrière-plan est obsolète (si c'est le cas), vous pouvez obtenir toutes les balises actives et injecter votre code par programme, ou autre. solutions pour garantir la mise à jour de votre extension.
Utilisez le code suivant pour obtenir toutes les balises :
chrome.tabs.query
et injectez votre code dans toutes les pages
chrome.tabs.executeScript(tabId, {file: "content_script.js"});
Il existe un moyen de faire en sorte que les extensions contenant beaucoup de scripts de contenu continuent de fonctionner correctement après la mise à niveau et de les rendre actives immédiatement après l'installation.
Installation/Mise à niveau
La façon de l'installer consiste simplement à parcourir tous les onglets de toutes les fenêtres et à injecter par programme un script dans l'onglet avec l'URL correspondante.
ManifestV3
manifest.json :
Ces host_permissions doivent être les mêmes que celles du script de contenu
matches
.background.js :
Il s'agit d'un exemple simplifié et ne traite pas des cadres. Vous pouvez utiliser l'API getAllFrames et faire correspondre les URL vous-même, consultez la documentation pour les modèles de correspondance.
ManifestV2
Évidemment, vous devez le faire dans une page d'arrière-plan ou une page d'événementscript déclaré dans manifest.json :
background.js :
Faits historiques intéressants
Dans l'ancien Chrome 26 et versions antérieures, les scripts de contenu peuvent restaurer les connexions aux scripts d'arrière-plan. Cela a été corrigé en 2013http://crbug.com/168263. Vous pouvez voir un exemple de cette technique dans une version antérieure de cette réponse.