npm i tabs-counter
Отслеживает открытые вкладки браузера текущего сайта.
Метод основан на создании временного URL.createObjectURL() => blob:http//...
(пока живет document), обмене через localStorage
и проверки его существования через fetch(URL)
.
Страницы, которые необходимо включить в рузультат подсчета, должны импортировать "tabs-counter" и вызвать Counter(...)
:
import Counter from 'tabs-counter'
// Считаем кол-во одинаковых адресов url
const calculate = (data) => {
let urls = new Map()
for (let url of Object.values(data)) {
let count = urls.get(url)
urls.set(url, (count ? ++count : 1))
}
const entries = [...urls.entries()]
for (let [url, count] of entries) {
console.log(`"${url}": ${count}`)
// => "http://site/foo": 2
// => "http://site/bar": 1
}
}
// Слушатель
const listener = ({ open, close }) => {
calculate(open)
calculate(close)
}
// Вызываем как функцию
const counter = Counter({ key:'tabs-counter', listener })
// ...
Если страница не предполагает использования API, но должна учитываться в результатах, код может быть импортирован без установки слушателя:
import Counter from 'tabs-counter'
Counter({ key:'tabs-counter'})
Возвращает объект с нижеуказанными методами.
// options Необязательные опции
{
// По умолчанию, ключом localStorage является "tabs-counter"
key: 'tabs-counter',
// Устанавливает слушателя изменения localStorage, после вызова Counter(...)
onChanges: true,
// Слушатель вызывается при каждом открытии/закрытии вкладки сайта
// ... можно установить в любой момент
listener: Function
}
В listener({open,close})
передается объект, где каждое свойство содержит результат подобный вызову get()
.
{
open: { "blob...": "http...", ... }, // открытые вкладки
close: { "blob...": "http...", ... }, // закрытые
}
Закрытые вкладки(close:{...}
) не сохраняются, при повторном вызове объект не будет содержать предыдущий результат.
Возобновляет отслеживание изменений localStorage, если был вызван off()
.
Временно приостанавливает отслеживание изменений localStorage.
Возвращает объект, где ключом является уникальный url, а значением реальный адрес document.URL
. Результат содержит открытые вкладки или пустой объект, если был вызван off()
.
{
"blob:http://site/a1e99ad5-fe7c...": "http://site/"
"blob:http://site/bf4ac9d1-35c8...": "http://site/foo.html"
"blob:http://site/fa68258f-bc9c...": "http://site/foo.html"
}
Принудительно тестирует доступность уникальных url(blob:http://...
) и вызывает listener({open,close})
.
Добавить слушателя.
Удалить слушателя.