setInterval重新加载页面谷歌浏览器扩展程序

时间:2012-10-21 07:00:04

标签: javascript google-chrome-extension

我有代码背景js:

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秒就有一个警告框“test”;

但是我用location.reload替换了alert('test'):

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"]
});​

第一次只刷新1次,不再继续刷新。请帮帮我,谢谢

2 个答案:

答案 0 :(得分:2)

刷新页面时,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,否则您将导致很多问题。这些留给你练习。

答案 1 :(得分:0)

@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