0

我有代码背景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 秒它有一个警告框“测试”;

但是我用 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次刷新,不会继续刷新。请帮助我,谢谢

4

2 回答 2

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以便仅刷新当前页面。

请注意,用户可能会多次选择该选项,因此您可能需要检查是否是这种情况或删除上下文菜单项。Also when the tab is closed you will need to call clearInterval, or else you will cause a lot of problems. 这些留给你练习。

于 2012-10-21T07:04:33.867 回答
0

@阿尔文,

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

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

于 2012-10-21T08:23:44.693 回答