Estou escrevendo uma extensão do Chrome. E eu quero usar jQuery
na minha extensão. Não estou usando nenhuma página de plano de fundo , apenas um script de plano de fundo .
Aqui estão meus arquivos:
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"
}
}
Meu background.js
arquivo apenas executa outro arquivo chamadowork.js
// Respond to the click on extension Icon
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript({
file: 'work.js'
});
});
A lógica principal da minha extensão está dentro work.js
. O conteúdo do qual eu acho que não importa aqui para esta pergunta.
O que quero perguntar é como posso usar o jQuery na minha extensão. Desde que eu não estou usando nenhuma página de plano de fundo. Não posso simplesmente adicionar o jQuery a ele. Então, como posso adicionar e usar o jQuery na minha extensão?
Tentei executar o jQuery junto com o meu work.js do background.js
arquivo.
// 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'
});
});
E funciona bem, mas estou preocupada se os scripts adicionados a serem executados dessa maneira estão sendo executados de forma assíncrona. Se sim, pode acontecer que o work.js seja executado antes do jQuery (ou de outras bibliotecas que eu possa adicionar no futuro).
E também gostaria de saber qual é a melhor e correta maneira de usar bibliotecas de terceiros, na minha extensão do Chrome.
Respostas:
Você precisa adicionar seu script jquery ao seu projeto de extensão chrome e ao diretório
background
seção do seu manifest.json assim:Se você precisar de jquery em um content_scripts, precisará adicioná-lo também no manifesto:
Foi o que eu fiz.
Além disso, se bem me lembro, os scripts em segundo plano são executados em uma janela em segundo plano pela qual você pode abrir
chrome://extensions
.fonte
You have to add your jquery script to your chrome-extension project
? Eu fiz isso: manifest.json:"background": {
`" scripts ": [" thirdParty / jquery-2.0.3.js "," background.js "],` `" persistent ": false``}, `e baixei o jQuery para a pasta ThirdParty. No entanto, ainda não consigo usar o jQuery. Ele deu o erro:Uncaught ReferenceError: $ is not defined
adicionei isso ao meuwork.js
arquivo para teste.$("body").html("Foo!");
work.js
arquivo.Uncaught ReferenceError: $ is not defined
. Se puder, faça o upload de um exemplo de trabalho em algum lugar. Apenas um exemplo simples, como '$ ("body"). Html ("Foo!");' em work.js.jQuery
ou$
reconhecido. Descobri que eu estava fazendo referência ao jQuery por último na matriz de manifesto. Quando o coloquei pela primeira vez, foi reconhecido.É muito fácil, basta fazer o seguinte:
adicione a seguinte linha no seu manifest.json
Agora você pode carregar o jQuery diretamente do URL
Fonte: google doc
fonte
subresource integrity
(SRI).Isso realmente não deveria ser uma preocupação: você enfileira os scripts para serem executados em um determinado contexto JS, e esse contexto não pode ter uma condição de corrida, pois é de thread único.
No entanto, a maneira correta de eliminar essa preocupação é encadear as chamadas:
Ou, generalizado:
Ou, prometido (e alinhado mais com a assinatura adequada):
Ou, por que diabos não,
async
/await
-ed para uma sintaxe ainda mais clara:Observe que no Firefox você pode simplesmente usar
browser.tabs.executeScript
, pois retornará uma promessa.fonte
Além das soluções já mencionadas, você também pode fazer o download
jquery.min.js
localmente e usá-lo -Para download -
manifest.json -
em html -
Referência - https://developer.chrome.com/extensions/contentSecurityPolicy
fonte
No meu caso, obtive uma solução funcional por meio do CrossDocument Messaging (XDM) e da execução do Chrome na extensão onclick, em vez do carregamento da página.
manifest.json
background.js
myscript.js
fonte