Javascript 如何从Chrome扩展名的JS文件调用特定函数

Javascript 如何从Chrome扩展名的JS文件调用特定函数,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在编写一个Chrome扩展,我正在试图找出如何从background.js文件调用script.js文件中的特定函数 到目前为止,我的background.js文件如下所示 chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.executeScript(null, {file: "script.js"}); }); 当用户选择扩展图标时,它将运行我的script.js文件中的所有js 但是,我

我正在编写一个Chrome扩展,我正在试图找出如何从
background.js
文件调用
script.js
文件中的特定函数

到目前为止,我的background.js文件如下所示

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "script.js"});
});
当用户选择扩展图标时,它将运行我的
script.js
文件中的所有js

但是,我希望script.js包含两个函数,当用户选择扩展图标时,它会在每个函数之间切换

例如,如果我的
script.js
文件

function makeChanges(){

 // some functinality

}


function undoChanges(){

  // some other functionality 

}
当单击扩展图标时,我将如何具体地让其中一个函数运行?这是否可以使用
executeSript

使用弹出窗口

所以,当用户单击图标时,您可以显示任何操作按钮


如果您想在不同的情况下调用不同的函数,最好使用sendMessage()

在您将script.js加载到当前页面后,使用以下background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "script.js"});
});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) 
{
    chrome.tabs.sendMessage(tabs[0].id, {'callFunction': 'makeChanges'});
    // OR
    chrome.tabs.sendMessage(tabs[0].id, {'callFunction': 'undoChanges'});
}
您可以从background.js向您的脚本.js发送消息:

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {file: "script.js"});
});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) 
{
    chrome.tabs.sendMessage(tabs[0].id, {'callFunction': 'makeChanges'});
    // OR
    chrome.tabs.sendMessage(tabs[0].id, {'callFunction': 'undoChanges'});
}
并在script.js中添加以下逻辑:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) 
{ 
    if(request.callFunction === 'makeChanges')
        makeChanges();
    else
        undoChanges();
});

我相信execute脚本将运行该文件,但不知道要调用的任何函数。为此,只需包含脚本文件并正常调用其函数。在executeScript的回调中,使用
code:'foo()'
运行另一个executeScript,而不是使用文件: