9
我想模仿window.location.reload()
的效果,但僅適用於運行內容腳本的「孤立的世界」。也就是說,刪除所有現有的JS,尤其是回調和事件綁定。有沒有一個很好的方法來做到這一點?重新加載Chrome擴展內容腳本執行環境
注意:chrome.runtime.reload()
不適用於此;它具有重新加載擴展和後臺腳本的效果,但它不會在用戶刷新之前重新加載現有的內容腳本。
我想模仿window.location.reload()
的效果,但僅適用於運行內容腳本的「孤立的世界」。也就是說,刪除所有現有的JS,尤其是回調和事件綁定。有沒有一個很好的方法來做到這一點?重新加載Chrome擴展內容腳本執行環境
注意:chrome.runtime.reload()
不適用於此;它具有重新加載擴展和後臺腳本的效果,但它不會在用戶刷新之前重新加載現有的內容腳本。
據我所知,沒有自動的方式來重新注入內容腳本,例如在擴展更新期間。你可以做的是找到所有標籤的url匹配你需要的模式,並以編程方式重新注入使用chrome.tabs.executeScript
的內容腳本。
請注意,此方法需要爲內容腳本所使用的方法添加相同URL模式的權限。
manifest.json的:
"content_scripts":
[
{
"matches": [ "http://*.google.com/*" ],
"js": [ "content_script.js" ]
}
],
"permissions":
[
"tabs", "http://*.google.com/*"
]
Background.js:
chrome.runtime.reload();
chrome.tabs.query({ url: "http://*.google.com/*" }, function(tabs)
{
for(var i = 0; i < tabs.length; i++)
{
chrome.tabs.executeScript(tabs[i].id, { file: "content_script.js" }, function() {});
}
});
的問題是,這會保持現有的情況下保持不變。如果我在一個executeScript中啓動setInterval,它將在下一個executeScript之後繼續運行。 –
當第二次執行第二個內容腳本時,您可以訪問以前的變量,因此您可以重置所有內容。 –
@Metoule在從'chrome:// extension'重新加載擴展後注入時,您無法訪問以前的變量。你測試過了嗎? – vaughan