Javascript 正在尝试创建向下滚动页面的chrome扩展

Javascript 正在尝试创建向下滚动页面的chrome扩展,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我想创建一个类似这样的chrome扩展 如果我点击扩展图标,页面应该开始向下滚动,并保持滚动直到我再次点击图标(切换) manifest.json是 { "name": "scrolldown", "description": "scroll down the page", "version": "0.1", "permissions": [ "tabs", "<all_urls>" ], "browse

我想创建一个类似这样的chrome扩展

如果我点击扩展图标,页面应该开始向下滚动,并保持滚动直到我再次点击图标(切换)

manifest.json是

{
    "name": "scrolldown",
    "description": "scroll down the page",
    "version": "0.1",
    "permissions": [
        "tabs",
        "<all_urls>"
    ],
    "browser_action": {
        "default_icon": "icon.png"
    },
    "background": {
       "scripts": [
            "background.js"
        ]
    },
    "manifest_version": 2
}
此代码是半正确的,即如果我单击图标页面开始向下滚动,但如果我再次单击图标页面不会停止。它不停地轻蔑着

我认为background.js中有问题


请帮助

您的问题是无法从全局范围访问时间

您应该在函数外部声明
var-time
,如下所示:

var toggle = false;
var time;

chrome.browserAction.onClicked.addListener(function(tab) {
    toggle = !toggle;
    if (toggle) {
        time = setInterval(function() {
            chrome.tabs.executeScript(tab.id,
                {
                    code: 'window.scrollBy(0, 1000);'
                }
            );
        }, 2000);
    } else {
        clearInterval(time);
    }

});
这将
时间
放入全局范围


有关作用域的更多信息,请查看StackOverflow,并阅读相关内容。

Yekes,如果您清理了代码,您(尤其是其他人)在调试时可能会更幸运@Andrew如果您有时间,请编辑我的问题没问题——好了:)很抱歉,我对chrome扩展没有太多经验,因此我不确定我是否可以进一步提供帮助:(@Andrew Huraahhh!它有效,谢谢Andrew,将其作为答案发布,并请解释其背后的原因Andrew虽然我得到了解决方案,但即使阅读了这些链接,我仍然感到困惑,我定义了var time并在同一个函数中访问它,因此应该可以在
clearInterval(time)中访问它
不用担心。实际上,每次单击扩展按钮时,您都在调用一个新函数,因为该函数完全在addListener中定义;因此,它每次都不是同一个函数。这有意义吗?如果您愿意,我可以编辑该问题以使其更清晰。@初学者您还需要帮助吗?我现在明白了,非常感谢您德鲁,没问题!!快乐编码:)
var toggle = false;
var time;

chrome.browserAction.onClicked.addListener(function(tab) {
    toggle = !toggle;
    if (toggle) {
        time = setInterval(function() {
            chrome.tabs.executeScript(tab.id,
                {
                    code: 'window.scrollBy(0, 1000);'
                }
            );
        }, 2000);
    } else {
        clearInterval(time);
    }

});