[英]Detect page changes that'd don't refresh in Chrome Extension Javascript + Clay.js
[英]refresh page until it changes chrome extension
我正在為刷新頁面的谷歌瀏覽器構建擴展,直到它更改其鏈接。 我試過這段代碼,但沒有奏效:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { if (/^https:\/\/meet.google.com\/lookup/.test(changeInfo.url)) { var intervalId = window.setInterval(function() { var code = 'window.location.reload(); '; chrome.tabs.executeScript(tab.id, {code: code}); }, 30000); } else { window.clearInterval(intervalId) } });
當 meet.google.com/lookup/ 另一個鏈接發生變化時,我想停止刷新,這也可能是 meet.google.com 或 meet.google.com/abcdef/。 所以它刷新了頁面,但是當google meet的鏈接發生變化時,它一直在刷新頁面。 我該如何解決? 感謝大家!
PS:我在評論中添加了我的答案以便更容易理解
我假設您的目標是每三十秒刷新一個標簽,除非它的位置是 meet.google ...(您使用的正則表達式)。
如果這是您的目標,那么這里的問題是,一旦執行事件偵聽器,intervalID 就會丟失。 因此,您需要在偵聽器 scope 之外維護 intervalID,以便在該選項卡更改 URL 時將其清除。
我有下面的代碼,試試這個
var intervalMap = {};
function handleUpdated(tabId, changeInfo, tabInfo) {
if (changeInfo.url) {
console.log("Tab: " + tabId + " URL changed to " + changeInfo.url);
if (changeInfo.url.indexOf("https://meet.google.com/?authuser") > -1) {
console.log("Found URL to reload. Added interval");
var intervalId = window.setInterval(function () {
var code = "window.location.reload(); ";
chrome.tabs.executeScript(tabId, { code: code });
}, 3000);
//Save the intervalId to our map
intervalMap[tabId] = intervalId;
} else if (intervalMap[tabId]) {
//Take interval ID from map and clear it
console.log("Tab changed to differente URL. Removed interval");
window.clearInterval(intervalMap[tabId]);
}
}
}
chrome.tabs.onUpdated.addListener(handleUpdated);
清單(第 2 版)
{
"name": "Test",
"version": "1.0",
"manifest_version": 2,
"background": {
"scripts": ["background.js"]
},
"permissions": ["background", "tabs", "https://meet.google.com/*"]
}
編輯:已更新代碼以添加相關控制台日志。 添加清單以確保添加所需的權限
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.