![](/img/trans.png)
[英]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.