Требование: Создайте расширение 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) при макс.В чем может быть причина? Фоновый сценарий становится неактивным через некоторое время, и, следовательно, мое расширение не может отслеживать использование?