Passando parâmetros para scripts de conteúdo injetados com chrome.tabs.executeScript()
Ao injetar um arquivo de script de conteúdo usando chrome.tabs.executeScript ({file: "content.js"}), surge uma pergunta comum: como passar parâmetros para o JavaScript dentro do arquivo de script de conteúdo?
Parameter Passing Fallacy
É importante esclarecer que você não pode passar parâmetros diretamente para um arquivo. Em vez disso, você tem duas opções para obter essa funcionalidade:
1. Configurando parâmetros antes da execução do arquivo
Aninhe chamadas chrome.tabs.executeScript para definir variáveis antes de injetar o arquivo:
chrome.tabs.executeScript(tab.id, {
code: 'var config = 1;'
}, function() {
chrome.tabs.executeScript(tab.id, {file: 'content.js'});
});
Para variáveis complexas, considere usar JSON.stringify para converter um objeto em uma string:
var config = {somebigobject: 'complicated value'};
chrome.tabs.executeScript(tab.id, {
code: 'var config = ' JSON.stringify(config)
}, function() {
chrome.tabs.executeScript(tab.id, {file: 'content.js'});
});
Em content.js, você pode acessar estas variáveis:
// content.js
alert('Example:' config);
2. Configurando parâmetros após a execução do arquivo
Execute o arquivo primeiro e, em seguida, use a API de passagem de mensagens para enviar parâmetros:
chrome.tabs.executeScript(tab.id, {file: 'content.js'}, function() {
chrome.tabs.sendMessage(tab.id, 'whatever value; String, object, whatever');
});
Em content.js, ouça essas mensagens usando chrome.runtime.onMessage e lide com a mensagem:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
// Handle message.
// In this example, message === 'whatever value; String, object, whatever'
});
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3