一尘不染

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

javascript

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

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

阅读 3544

收藏
2020-04-25

共1个答案

一尘不染

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

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

在执行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文件之后的参数。您可以使用消息传递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'
});
2020-04-25