如何将参数传递给使用以下内容注入的内容脚本文件中的JavaScript
chrome.tabs.executeScript(tab.id, {file: "content.js"});
答案 0 :(得分:87)
没有“将参数传递给文件”这样的事情。
可以做的是在执行文件之前插入内容脚本,或在插入文件后发送消息。我将在下面展示这些不同方法的示例。
如果要在插入文件之前定义一些变量,只需嵌套chrome.tabs.executeScript
调用:
chrome.tabs.executeScript(tab.id, {
code: 'var config = 1;'
}, function() {
chrome.tabs.executeScript(tab.id, {file: 'content.js'});
});
如果您的变量不那么简单,那么我建议使用JSON.stringify
来转换字符串中的对象:
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'});
});
使用上一个方法,可以通过以下方式在content.js
中使用变量:
// content.js
alert('Example:' + config);
以前的方法可用于在JS文件之后设置参数。您可以使用message passing API传递参数:
,而不是直接在全局范围内定义变量chrome.tabs.executeScript(tab.id, {file: 'content.js'}, function() {
chrome.tabs.sendMessage(tab.id, 'whatever value; String, object, whatever');
});
在内容脚本(content.js
)中,您可以使用chrome.runtime.onMessage
事件侦听这些消息,并处理消息:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
// Handle message.
// In this example, message === 'whatever value; String, object, whatever'
});