Sambungan Chrome: Import modul ES6 dalam skrip kandungan
P粉141035089
2023-08-27 22:19:00
<p>Dalam <strong>Chrome 61</strong>, sokongan untuk modul JavaScript telah ditambahkan. Sekarang saya menjalankan Chrome 63. </p>
<p>Saya cuba menggunakan modul dalam skrip kandungan sambungan Chrome menggunakan sintaks <kod>import</kod>/<kod>eksport</kod> </p>
<p>Dalam<strong><kod>manifest.json</code></strong>: </p>
<pre class="brush:php;toolbar:false;">"content_scripts": [
{
"js": [
"content.js"
],
}
]</pre>
<p>Dalam<strong><kod>my-script.js</code></strong> (dengan <strong><code>content.js</code></strong> direktori yang sama ): </p>
<pre class="brush:php;toolbar:false;">'gunakan ketat';
const injectFunction = () => window.alert('hello world');
eksport lalai injectFunction;</pre>
<p>Dalam<strong><kod>kandungan.js</kod></strong>: </p>
<pre class="brush:php;toolbar:false;">'gunakan ketat';
import injectFunction daripada './my-script.js';
injectFunction();</pre>
<p>Saya mendapat ralat ini:<strong><kod>Ralat sintaks tidak ditangkap: Pengecam tidak dijangka</kod></strong></p>
<p>Jika saya menukar sintaks import kepada <kod>import {injectFunction} daripada './my-script.js';</code> saya mendapat ralat ini: <strong><code>Uncaught SyntaxError : Token yang tidak dijangka {</code></strong><
</p><p>Adakah terdapat masalah menggunakan sintaks ini dalam <strong><kod>kandungan.js</code></strong> dalam sambungan Chrome (kerana dalam HTML anda perlu menggunakan < ;kod>
<script type="module" src="script.js "></code> Nampaknya pelik bahawa Google mengabaikan sokongan untuk sambungan. </p></script>
</code></p>
Gunakan fungsi dinamik
import()
.Tidak seperti penyelesaian yang tidak selamat menggunakan elemen
chrome terbina dalam, seperti元素的不安全解决方法不同,此解决方法在相同的安全 JS 环境(内容脚本的隔离世界)中运行,您导入的模块仍然可以访问全局变量以及初始内容脚本的函数,包括内置的
chrome
API,例如chrome.runtime.sendMessage
chrome.runtime.sendMessage.
Dalamcontent_script.js
content_script.js ia kelihatan seperti Anda juga perlu mengisytiharkan skrip yang diimport dalam
Sumber Boleh Akses Webmanifes:
// ManifestV3
// ManifestV2
Ketahui butiran lanjut:-
Cara menggunakan "import" ES6 dengan sambungan Chrome-
Contoh kerja import ES6 dalam sambungan Chrome-
chrome.runtime.getURL
李>chrome.runtime.getURLPenafian
Pertama sekali, adalah penting untuk ambil perhatian bahawa mulai Januari 2018, skrip kandungan tidak menyokong modul. Penyelesaian ini memintas sekatan pada sambungan anda dengan membenamkan teg modul
script
ke dalam halaman yang dikembalikan.Ini adalah penyelesaian yang tidak selamat!
Skrip web (atau sambungan lain) boleh mengeksploitasi kod anda dan mengekstrak/menipu data dengan menggunakan setters/getters, proksi pada
berjalan dalam konteks JS halaman, bukan dalam persekitaran JS terpencil selamat yang menjalankan skrip kandungan secara lalai.Object.prototype
dan prototaip lainObject.prototype
和其他原型上使用 setter/getter、代理来利用您的代码并提取/欺骗数据函数和/或全局对象,因为script
fungsi dan/atau objek global, Kerana kod dalam elemenPenyelesaian yang selamat ialah dinamik
di sini.import()
ditunjukkan dalam jawapan lainIni milik saya
:manifest.json
web_accessible_resources
Sila ambil perhatian bahawa saya mempunyai dua skrip dalam .Ini milik saya
:content.js
main.js
Ini akan memasukkan ke dalam halaman web sebagai skrip modul.main.js
Semua logik perniagaan saya kini masukmain.js
(以及我将导入
的所有脚本)必须位于中清单中的 web_accessible_resources
Untuk kaedah ini berfungsi,mesti ada dalam web_accessible_resources dalam manifes dalam
.
Contoh penggunaan:my-script.js
ini ialah contoh skrip import: 🎜 🎜Ini berkesan! Tiada kesilapan yang dilemparkan dan saya gembira. :)🎜main.js
Dalam