Navigation API, история и границы приватности
Контролируемый тест переходов внутри документа и между документами, history state, порядка событий и запасного пути.
BotBrowser Team
Нужна структурированная документация по теме Платформа?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
BotBrowser может повторить разрешённую навигацию в указанном профиле и записать видимые результаты перехода и истории. Он не читает историю другого источника, не выводит личность из URL, не обходит политику браузера и не обещает одинаковую поддержку во всех версиях. Событие браузера описывает один документ, а не даёт доступ ко всей истории пользователя.
Кратко
- Navigation API структурирует изменения URL внутри документа и поддержанные переходы между документами.
navigate,currententrychangeи promise перехода относятся к разным этапам; записывайте время и результат.navigation.currentEntryиhistory.stateотносятся к активной записи текущего документа, а не к общей истории источников.- Тестируйте отдельно переход внутри документа, между документами и резервный путь при отсутствии
window.navigation. - BotBrowser повторяет объявленный сценарий и хранит ограниченные доказательства, но не превращает переход в признак личности.
Содержание
- Что наблюдает Navigation API
- Записи истории и приватность
- Порядок событий
- Контролируемый тест и резервный путь
- Таблица решений
- Итог
- Публичные источники
Что наблюдает Navigation API
Спецификация WICG Navigation API описывает URL назначения, тип и переход. Фрагмент или history.pushState() сохраняет документ и меняет активную запись; переход между документами заменяет документ. MDN Navigation API помогает проверить поддержку, но проверку window.navigation, нужного события и резервного пути следует выполнять в самом тесте.
navigate позволяет наблюдать или перехватывать подходящий переход. event.intercept() и event.transitionWhile() связывают отрисовку с переходом, но незавершённый promise не означает commit. Основой остаётся модель истории WHATWG HTML: запись содержит URL и необязательное состояние, а обход активирует запись.
Записи истории и приватность
navigation.currentEntry и history.state помогают восстановить состояние приложения в текущем источнике. Они не раскрывают всю историю, приватный сеанс или записи другого источника. Храните синтетический ключ маршрута, не токены, адреса почты и данные клиентов. Скрипт того же источника может скопировать состояние, поэтому это не удостоверение личности.
Страница не читает состояние межисточникового назначения. Серверные журналы, Referer, cookies и параметры приложения являются отдельными каналами. Одинаковый URL может иметь разные ID записей и не равен ни одному посещению, ни одному человеку.
Порядок событий
navigate даёт точку наблюдения, а currententrychange может последовать за обновлением внутри документа. При смене документа старая страница может быть выгружена раньше последующих событий. Записывайте монотонное время, имя, сокращённый путь, ID записи и результат promise. Выполненный transitionWhile() доказывает лишь завершение клиентской работы, не успех API или платежа. Отдельно проверяйте назад и вперёд.
Контролируемый тест и резервный путь
Используйте синтетические пути и не сохраняйте cookies, авторизационные заголовки и клиентские URL:
const events = [];
const log = name =>
events.push({
name,
atMs: Math.round(performance.now()),
entryId: window.navigation?.currentEntry?.id ?? null,
path: new URL(location.href).pathname,
});
if (window.navigation) {
navigation.addEventListener('navigate', () => log('navigate'));
navigation.addEventListener('currententrychange', () => log('currententrychange'));
}
history.pushState({ route: 'synthetic-a' }, '', '/fixture/a');
log('after-push');
await page.getByRole('link', { name: 'cross-document' }).click();
console.log(events);
Если API или перехват недоступны, применяйте обычные ссылки и popstate, а переход между документами оставьте браузеру. Критерий: сохранение инварианта продукта, а не копирование каждого внутреннего события. Запишите режим и версию браузера.
Таблица решений
| Наблюдение | Безопасное толкование | Не утверждать | Действие |
|---|---|---|---|
navigate до обновления | Документ увидел переход | Commit сервера или личность | Записать цель и результат |
| Изменился ID записи | Изменилась активная запись | Обязательно новый документ | Разделить состояние и жизненный цикл |
| Promise выполнен | Клиентская работа завершена | Успех API или платежа | Проверить сеть отдельно |
Нет window.navigation | Нужен резервный путь | Несовместимость всех браузеров | Проверить ссылку и popstate |
| Внешняя цель загрузилась | Переход выполнен | Чтение исходной истории | Проверить изоляцию |
BotBrowser позволяет повторять разрешённый сценарий с указанными браузером, платформой, прокси и профилем. Он не может обойти политики, не читает внешнюю историю, не включает отсутствующее событие и не подтверждает серверный результат.
Итог
Рассматривайте Navigation API как поверхность наблюдения текущего контекста. Разделяйте состояние внутри документа и commit между документами, измеряйте порядок событий и запускайте настоящий резервный путь. Храните историю минимальной и синтетической; доказательство должно ясно показывать, что документ увидел и какой режим использовался.
Дальше
- Политика same-origin и изоляция сайтов
- Границы CORS между источниками
- Исследование приватности по открытым спецификациям
Публичные источники
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.