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