Javascript 背景页面的Chrome扩展问题

Javascript 背景页面的Chrome扩展问题,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,当用户单击浏览器操作时,我试图对网页执行JavaScript代码。它工作得很好,当我试图把它放在背景页上时,它就搞砸了。 我希望特定的代码执行一次,当再次单击图标时,运行不同的代码。我试图做到以下几点 //Background page <Script> function goNow() { var live = 2; chrome.tabs.executeScript(null,

当用户单击浏览器操作时,我试图对网页执行JavaScript代码。它工作得很好,当我试图把它放在背景页上时,它就搞砸了。 我希望特定的代码执行一次,当再次单击图标时,运行不同的代码。我试图做到以下几点

//Background page
<Script>
    function goNow() {
        var live = 2;
        chrome.tabs.executeScript(null,
                                 {code:"Code"});
    }

    function Shutdown(){
         var live = 1;
         chrome.tabs.executeScript(null,
                                   {code:"Code"});
    }

    function runLive(live){
        if (live==1) {goNow()}
        else {Shutdown()}
    }

    chrome.browserAction.onClicked.addListener(runLive)

</script>
//背景页
函数goNow(){
var-live=2;
chrome.tabs.executeScript(null,
{代码:“代码”});
}
函数Shutdown(){
var-live=1;
chrome.tabs.executeScript(null,
{代码:“代码”});
}
函数runLive(live){
如果(live==1){goNow()}
else{Shutdown()}
}
chrome.browserAction.onClicked.addListener(runLive)
当然,“代码”是一种JavaScript代码,当注入页面时效果非常好。

  • chrome.browserAction.onClicked.addListener将tab对象传递给回调函数,您不能只在那里传递自己的参数

  • 在函数中声明变量(通过使用
    var
    关键字)使其仅在此函数中可用

您的代码应该是这样的:

//global variable 
var live = 1;

function goNow() {
    live = 2;
    chrome.tabs.executeScript(null, {code:"Code"});
}

function Shutdown(){
    live = 1;
    chrome.tabs.executeScript(null, {code:"Code"});
}

function runLive(tab){
    if(live==1){goNow()}
    else{Shutdown()}
}

chrome.browserAction.onClicked.addListener(runLive);

很有效,谢谢。我仍然不明白为什么在runLive函数中使用“tab”。@Ariel如果您查看API,它会列出哪些参数将发送到此回调函数。您可以随意调用此参数,但它将包含一个选项卡。如果要回滚某人的合法编辑,至少要修复拼写和语法错误。