如何从 Chrome 扩展程序中的内容脚本中获取变量

How to get variables from content scripts in a Chrome extension?

本文关键字:脚本 获取 变量 Chrome 扩展 程序      更新时间:2023-09-26

我正在尝试修改Google用于代码注入的示例代码。文件manifest.json包含一个后台脚本:

  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },

我添加一个内容脚本:

  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["filter.js"]
    }
  ],

现在,我想在用户单击扩展的按钮时调用filter.js中定义的函数foo()。我在background.js这样做:

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript({
    code: 'foo(testText);'
  });
});

其中foo()filter.js

定义为
function foo(test) {
  alert('Test: ' + String(test));
}
var testText = 'foo';

我可以执行该函数,但无法传递testText变量。我得到VM3181:1 Uncaught ReferenceError: testText is not defined.

我知道我错误地引用了变量,但是如何正确执行此操作?

看看 sendMessageonMessage ,示例来自 Google 的重新利用:

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id, {greeting: "foo"}, function(response) {
        console.log(response.farewell);
    });
});

filter.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting == "foo") {
            //your Foo function can be called
            sendResponse({farewell: "bar"});
        }
});