Javascript 设置重新加载页面的间隔google chrome扩展

Javascript 设置重新加载页面的间隔google chrome扩展,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有代码背景: chrome.contextMenus.onClicked.addListener(function(tab) { chrome.tabs.executeScript(null, { code: "setInterval(function(){alert('test')}, 2000)" }); }); var id = chrome.contextMenus.create({ "title": "Auto Refresh", "

我有代码背景:

chrome.contextMenus.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {
        code: "setInterval(function(){alert('test')}, 2000)"
    });
});

var id = chrome.contextMenus.create({
    "title": "Auto Refresh",
    "contexts": ["page"]
});​
它工作,每2秒它有一个警报框“测试”

但我将警报(“测试”)替换为location.reload:

chrome.contextMenus.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, {
        code: "setInterval(function(){location.reload()}, 2000)"
    });
});

var id = chrome.contextMenus.create({
    "title": "Auto Refresh",
    "contexts": ["page"]
});​

它第一次只有一次刷新,不继续刷新。请帮助我,谢谢

当页面刷新时,
setInterval
句柄将消失,因此它将无法按预期工作

解决方案是在扩展内执行
setInterval

chrome.contextMenus.onClicked.addListener(function(tab) {
    setInterval(function() {
        chrome.tabs.executeScript(tab.id, {
            code: "location.reload()"
        });
    }, 2000);
});

var id = chrome.contextMenus.create({
    "title": "Auto Refresh",
    "contexts": ["page"]
});​
当我确认您只想刷新当前页面时,我添加了
tab.index
作为
chrome.tabs.executeScript
的第一个参数,以便只刷新当前页面

注意用户可能会多次选择该选项,因此您可能需要检查情况是否属实或删除关联菜单项。此外,当该选项卡关闭时,您需要调用
clearInterval
,否则会导致很多问题。这些留给你练习。

@Alvin

根据您的回答,我找到了解决方案:

chrome.contextMenus.onClicked.addListener(function(tab) {
    var tabID;
    chrome.tabs.getSelected(null, function(tab) {
        tabID = tab.id;
    });
    setInterval(function() {
        chrome.tabs.executeScript(tabID, {
            code: "location.reload()"
        });
    }, 2000);
});
var id = chrome.contextMenus.create({
    "title": "Auto Refresh",
    "contexts": ["page"]
});

我添加了chrome.tabs.getSelected来保存tab.id,这个解决方案让我很满意:D

你好,阿尔文,谢谢你,但是你的解决方案会让用户选择的选项卡刷新,或者当我添加新选项卡时,它也会刷新。我只需要刷新一个选项卡。你有什么建议吗?嗨,阿尔文,什么是标签索引?你是说tab.id?不,我不想刷新当前页面,我想刷新特定页面,当我选择一个页面时,我单击contextmenu上的refresh,即使我添加了一个新的选项卡或选择了其他选项卡,这个页面也将永远刷新。@DarkLight我看不到当前页面和您所说的“特定页面”之间的区别?这意味着,当我有一个页面a,我点击“刷新”上下文菜单,页面A将被刷新。当我添加新的页面B时,页面A仍会刷新,而页面B不会刷新refreshed@DarkLight这就是为什么我说没有区别。你还没试过我的密码。