要求:进行 chrome扩展,以跟踪用户在个人资料页面上花费的时间。 (假设:Facebook的个人资料页面。)
文件:background.js
(在这里,我们将附加侦听器并设置时间间隔。
这是我现在要使用的:(假设相关常量)
const urlRegex = new RegExp(/.+/); // pass everything for now
function updateActiveTabState() {
// If idle, ignore
chrome.idle.queryState(IDLE_TIME, state => {
// User is active
if (state === "active") {
chrome.tabs.query({
active: true,
lastFocusedWindow: true
},
tabs => {
if (tabs.length === 0) return;
const tab = tabs[0];
const tabID = tab && tab.id;
const tabURL = tab && tab.url;
if (
tab &&
tabURL && ["loading", "complete"].indexOf(tab.status) > -1
) {
if (!urlRegex.exec(tabURL)) return;
const uniqueDomain = tabURL && getUniqueId(tabURL);
if (!uniqueDomain) return;
chrome.windows.get(tabs[0].windowId, function (currentWindow) {
if (currentWindow.focused == true) {
updateLocal(uniqueDomain, tabID);
}
});
}
}
);
}
});
}
function updateLocal(domain, tabId) {
const apps = JSON.parse(localStorage["apps"]);
if (!apps[domain]) {
tabIdDomains[tabId] = domain;
apps[domain] = {
sumTime: UPDATE_INTERVAL
};
} else {
apps[domain].sumTime += UPDATE_INTERVAL;
}
localStorage["apps"] = JSON.stringify(apps);
}
chrome.tabs.onRemoved.addListener(onTabClosed);
setInterval(function () {
updateActiveTabState();
}, UPDATE_INTERVAL * 1000);
问题:这是跟踪此问题的正确方法吗?请注意,我需要推送有关特定URL的数据。这就是我在 TabClose 事件中添加侦听器的原因。请让我知道是否也应该发布该方法。
在生产中,没有错误,但是此脚本捕获的时间最多为分钟(4、5或7),以分钟为单位。背后的原因可能是什么?一段时间后,后台脚本会变为非活动状态,因此我的扩展程序无法跟踪使用情况吗?