Пишу расширение для хрома. И я хочу использовать jQuery
в своем расширении. Я не использую фоновую страницу , только фоновый скрипт .
Вот мои файлы:
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
файл просто запускает другой файл с именемwork.js
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'work.js'
});
});
Основная логика моего расширения - внутри work.js
. Содержание, которое я не думаю, имеет значение для этого вопроса.
Я хочу спросить, как я могу использовать jQuery в своем расширении. Поскольку я не использую фоновую страницу. Я не могу просто добавить к нему jQuery. Итак, как я могу добавить и использовать jQuery в свое расширение?
Я пробовал запустить jQuery вместе с моим work.js из background.js
файла.
// 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'
});
});
И он работает нормально, но меня беспокоит, выполняются ли скрипты, добавленные для выполнения таким образом, асинхронно. Если да, то может случиться так, что work.js запускается даже до jQuery (или других библиотек, которые я могу добавить в будущем).
И я также хотел бы знать, как правильно и лучше всего использовать сторонние библиотеки в моем расширении Chrome.
Ответы:
Вам нужно добавить свой jquery-скрипт в свой проект расширения chrome и в
background
раздел вашего manifest.json следующим образом:Если вам нужен jquery в content_scripts, вы также должны добавить его в манифест:
Вот что я сделал.
Кроме того, если я правильно помню, фоновые сценарии выполняются в фоновом окне, которое вы можете открыть через
chrome://extensions
.источник
You have to add your jquery script to your chrome-extension project
? Я сделал это: manifest.json:"background": {
`" scripts ": [" thirdParty / jquery-2.0.3.js "," background.js "],` `" persistent ": false``}, и я загрузил jQuery в папку ThirdParty. Однако я все еще не могу использовать jQuery. Это дает ошибку:Uncaught ReferenceError: $ is not defined
я добавил это в свойwork.js
файл для тестирования.$("body").html("Foo!");
work.js
файла.Uncaught ReferenceError: $ is not defined
, Если можете, не могли бы вы выложить где-нибудь рабочий пример. Просто простой пример, например, "$ (" body "). Html (" Foo! "); ' в work.js.jQuery
или$
быть признанным. Оказалось, что я ссылался на jQuery последним в массиве манифеста. Когда я поставил его первым, он был признан.Это очень просто, просто сделайте следующее:
добавьте следующую строку в свой manifest.json
Теперь вы можете загружать jQuery прямо с url-адреса.
Источник: google doc
источник
subresource integrity
(SRI).На самом деле это не должно вызывать беспокойства: вы ставите в очередь сценарии для выполнения в определенном контексте JS, и этот контекст не может иметь состояния гонки, поскольку он однопоточный.
Однако правильный способ устранить эту проблему - связать вызовы:
Или обобщенно:
Или обещанный (и приведенный в соответствие с надлежащей подписью):
Или, черт возьми, нет,
async
/await
-ed для еще более ясного синтаксиса:Обратите внимание: в Firefox вы можете просто использовать,
browser.tabs.executeScript
поскольку он вернет Promise.источник
Помимо уже упомянутых решений, вы также можете загрузить его
jquery.min.js
локально, а затем использовать -Для скачивания -
manifest.json -
в html -
Ссылка - https://developer.chrome.com/extensions/contentSecurityPolicy
источник
В моем случае я получил рабочее решение через Cross-Document Messaging (XDM) и Executing Chrome extension onclick вместо загрузки страницы.
manifest.json
background.js
myscript.js
источник