Saya sedang menulis ekstensi chrome. Dan saya ingin menggunakan jQuery
ekstensi saya. Saya tidak menggunakan halaman latar belakang apa pun , hanya skrip latar belakang .
Ini file saya:
manifest.json
{
"manifest_version": 2,
"name": "Extension name",
"description": "This extension does something,",
"version": "0.1",
"permissions": [
"activeTab"
],
"browser_action": {
"default_icon": "images/icon_128.png"
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"icons": {
"16": "images/icon_16.png",
"48": "images/icon_48.png",
"128": "images/icon_128.png"
}
}
background.js
File saya hanya menjalankan file lain bernamawork.js
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'work.js'
});
});
Logika utama ekstensi saya ada di dalam work.js
. Isi yang menurut saya tidak penting di sini untuk pertanyaan ini.
Yang ingin saya tanyakan adalah bagaimana saya bisa menggunakan jQuery di ekstensi saya. Karena saya tidak menggunakan halaman latar belakang apa pun. Saya tidak bisa menambahkan jQuery begitu saja. Jadi bagaimana saya dapat menambahkan dan menggunakan jQuery ke dalam ekstensi saya?
Saya mencoba menjalankan jQuery bersama dengan work.js saya dari background.js
file.
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'thirdParty/jquery-2.0.3.js'
});
chrome.tabs.executeScript({
file: 'work.js'
});
});
Dan itu berfungsi dengan baik, tetapi saya memiliki kekhawatiran apakah skrip yang ditambahkan untuk dieksekusi dengan cara ini dijalankan secara asinkron. Jika ya maka bisa terjadi bahwa work.js berjalan bahkan sebelum jQuery (atau pustaka lain yang dapat saya tambahkan di masa mendatang).
Dan saya juga ingin tahu apa cara yang benar dan terbaik untuk menggunakan pustaka pihak ketiga, di ekstensi chrome saya.
Jawaban:
Anda harus menambahkan skrip jquery Anda ke proyek ekstensi-chrome dan ke
background
bagian manifest.json Anda seperti ini:Jika Anda membutuhkan jquery di content_scripts, Anda harus menambahkannya juga di manifes:
Inilah yang saya lakukan.
Juga, jika saya ingat dengan benar, skrip latar belakang dijalankan di jendela latar belakang yang dapat Anda buka melalui
chrome://extensions
.sumber
You have to add your jquery script to your chrome-extension project
? Saya melakukan ini: manifest.json:"background": {
`" scripts ": [" thirdParty / jquery-2.0.3.js "," background.js "],` `" persistent ": false``}, `dan saya telah mengunduh jQuery ke folder thirdParty. Namun saya masih tidak bisa menggunakan jQuery. Ini memberikan kesalahan:Uncaught ReferenceError: $ is not defined
saya menambahkan ini kework.js
file saya untuk pengujian.$("body").html("Foo!");
work.js
file saya .Uncaught ReferenceError: $ is not defined
. Jika bisa, dapatkah Anda mengunggah contoh yang berfungsi di suatu tempat. Hanya contoh sederhana seperti melakukan '$ ("body"). Html ("Foo!");' di work.js.jQuery
atau$
dikenali. Ternyata saya mereferensikan jQuery terakhir di array manifes. Ketika saya mengutamakannya, itu diakui.Sangat mudah, cukup lakukan hal berikut:
tambahkan baris berikut di manifest.json Anda
Sekarang Anda bebas memuat jQuery langsung dari url
Sumber: google doc
sumber
subresource integrity
(SRI).Itu seharusnya tidak menjadi perhatian: Anda mengantrekan skrip untuk dieksekusi dalam konteks JS tertentu, dan konteks itu tidak boleh memiliki kondisi balapan karena itu single-threaded.
Namun, cara yang tepat untuk menghilangkan kekhawatiran ini adalah dengan menyambung panggilan:
Atau, digeneralisasikan:
Atau, dijanjikan (dan dibawa lebih sesuai dengan tanda tangan yang tepat):
Atau, mengapa tidak,
async
/await
-ed untuk sintaks yang lebih jelas:Catatan, di Firefox Anda bisa menggunakan
browser.tabs.executeScript
karena akan mengembalikan Promise.sumber
Terlepas dari solusi yang telah disebutkan, Anda juga dapat mengunduh
jquery.min.js
secara lokal dan kemudian menggunakannya -Untuk mengunduh -
manifest.json -
dalam html -
Referensi - https://developer.chrome.com/extensions/contentSecurityPolicy
sumber
Dalam kasus saya mendapat solusi yang berfungsi melalui Cross-document Messaging (XDM) dan Executing ekstensi Chrome onclick alih-alih memuat halaman.
manifest.json
background.js
myscript.js
sumber