将参数传递给使用chrome.tabs.executeScript()注入的内容脚本

时间:2013-07-10 09:55:19

标签: javascript google-chrome-extension

如何将参数传递给使用以下内容注入的内容脚本文件中的JavaScript

chrome.tabs.executeScript(tab.id, {file: "content.js"});

1 个答案:

答案 0 :(得分:87)

没有“将参数传递给文件”这样的事情。

可以做的是在执行文件之前插入内容脚本,或在插入文件后发送消息。我将在下面展示这些不同方法的示例。

在执行JS文件

之前设置参数

如果要在插入文件之前定义一些变量,只需嵌套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文件后设置参数

以前的方法可用于在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'
});