我有代码背景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次,不再继续刷新。请帮帮我,谢谢
答案 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