Назад к блогу
Платформа

Navigation API, история и границы приватности

Контролируемый тест переходов внутри документа и между документами, history state, порядка событий и запасного пути.

BotBrowser Team

Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

BotBrowser может повторить разрешённую навигацию в указанном профиле и записать видимые результаты перехода и истории. Он не читает историю другого источника, не выводит личность из URL, не обходит политику браузера и не обещает одинаковую поддержку во всех версиях. Событие браузера описывает один документ, а не даёт доступ ко всей истории пользователя.

Нейтральная схема событий навигации, состояния истории и границы приватности.

Кратко

  • Navigation API структурирует изменения URL внутри документа и поддержанные переходы между документами.
  • navigate, currententrychange и promise перехода относятся к разным этапам; записывайте время и результат.
  • navigation.currentEntry и history.state относятся к активной записи текущего документа, а не к общей истории источников.
  • Тестируйте отдельно переход внутри документа, между документами и резервный путь при отсутствии window.navigation.
  • BotBrowser повторяет объявленный сценарий и хранит ограниченные доказательства, но не превращает переход в признак личности.

Содержание

Что наблюдает 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 между документами, измеряйте порядок событий и запускайте настоящий резервный путь. Храните историю минимальной и синтетической; доказательство должно ясно показывать, что документ увидел и какой режим использовался.

Дальше

Публичные источники

#Navigation API#История#Приватность#Навигация В Документе#Переходы

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.