2012-10-21 264 views
0

我有代碼背景JS:的setInterval重新加載頁面谷歌瀏覽器擴展

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

它只有1次刷新的第一時間,不要繼續刷新。請幫助我,謝謝

回答

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,否則您會造成很多問題。這些留給你練習。

+0

嗨Alvin,謝謝你,但你的解決方案將使用戶選擇的選項卡刷新,或當我添加一個新的選項卡時,它也刷新。我只想要刷新1個選項卡。你有什麼建議嗎? –

+0

@DarkLight我做了一些編輯。請注意。 –

+0

嗨Alvin,什麼是tab.index?你的意思是tab.id?不,我不想刷新當前頁面,我想刷新特定頁面,當我選擇一個頁面時,我單擊上下文菜單上的刷新,並且即使添加了新選項卡或選擇其他選項卡,此頁面也會永久刷新。 –

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