Extension Chrome : importer des modules ES6 dans des scripts de contenu
P粉141035089
2023-08-27 22:19:00
<p>Dans <strong>Chrome 61</strong>, la prise en charge des modules JavaScript a été ajoutée. Maintenant, j'utilise Chrome 63. </p>
<p>J'essaie d'utiliser un module dans un script de contenu d'extension Chrome en utilisant la syntaxe <code>import</code>/<code>export</code> </p>
<p>Dans<strong><code>manifest.json</code></strong>:</p>
<pre class="brush:php;toolbar:false;">"content_scripts": [
{
"js": [
"content.js"
],
}
]≪/pré>
<p>Dans<strong><code>my-script.js</code></strong> (avec <strong><code>content.js</code></strong> même répertoire ):</p>
<pre class="brush:php;toolbar:false;">'use strict';
const injectFunction = () => window.alert('bonjour tout le monde');
exporter la fonction d'injection par défaut ;</pre>
<p>Dans<strong><code>content.js</code></strong>:</p>
<pre class="brush:php;toolbar:false;">'use strict';
importer injectFunction depuis './my-script.js' ;
injectFunction();</pre>
<p>J'obtiens cette erreur :<strong><code>Erreur de syntaxe non détectée : Identificateur inattendu</code></strong></p>
<p>Si je modifie la syntaxe d'importation en <code>import {injectFunction} from './my-script.js';</code> j'obtiens cette erreur : <strong><code>Uncaught SyntaxError : Jeton inattendu {</code></strong><
</p><p>Y a-t-il un problème lors de l'utilisation de cette syntaxe dans <strong><code>content.js</code></strong> dans l'extension Chrome (car en HTML, vous devez utiliser <p> ;code>
<script type="module" src="script.js "></code> syntaxe), ou est-ce que je fais quelque chose de mal ? Il semble étrange que Google ignore la prise en charge des extensions. </p></script>
</code></p>
Utilisez la fonction dynamic
import()
.Contrairement à la solution de contournement dangereuse utilisant l'élément
chrome intégrée, telle que元素的不安全解决方法不同,此解决方法在相同的安全 JS 环境(内容脚本的隔离世界)中运行,您导入的模块仍然可以访问全局变量以及初始内容脚本的函数,包括内置的
chrome
API,例如chrome.runtime.sendMessage
chrome.runtime.sendMessage.
Danscontent_script.js
content_script.js, cela ressemble à Vous devez également déclarer le script importé dans les
Ressources accessibles au Webdu manifeste :
// ManifesteV3
// ManifesteV2
En savoir plus :-
Comment utiliser "l'importation" ES6 avec l'extension Chrome-
Exemple fonctionnel d'importation ES6 dans l'extension Chrome-
chrome.runtime.getURL
李>chrome.runtime.getURLAvertissement
Tout d’abord, il est important de noter que depuis janvier 2018, les scripts de contenu ne prennent pas en charge les modules. Cette solution de contournement contourne les restrictions de votre extension en intégrant la balise module
script
dans la page renvoyée.C'est une solution dangereuse !
Les scripts Web (ou autres extensions) peuvent exploiter votre code et extraire/usurper des données en utilisant des setters/getters, des proxys sur
s'exécute dans le contexte JS de la page, et non dans l'environnement JS isolé et sécurisé qui exécute les scripts de contenu par défaut.Object.prototype
et d'autres prototypesObject.prototype
和其他原型上使用 setter/getter、代理来利用您的代码并提取/欺骗数据函数和/或全局对象,因为script
fonctions et/ou objets globaux, car le code à l'intérieur de l'élémentUne solution de contournement sûre est la dynamique
ici.import()
présentée dans une autre réponseC'est à moi
:manifest.json
web_accessible_resources
Veuillez noter que j'ai deux scripts en .C'est à moi
:content.js
main.js
Cela insérera dans la page Web en tant que script de module.main.js
Toute ma logique métier est maintenant dansmain.js
(以及我将导入
的所有脚本)必须位于中清单中的 web_accessible_resources
Pour que cette méthode fonctionne,importe
)doit être dans web_accessible_resources dans le manifeste dans
.
Exemple d'utilisation :my-script.js
voici un exemple du script d'importation : 🎜 🎜Ça marche ! Aucune erreur n’a été commise et j’étais heureux. :)🎜main.js
Dans