[42] Webブラウザーは、既読URLリストを持ちます。その挙動は明文化されておらず、 完全に実装依存ですが、大まかな動作は共通しています。
[43] navigate がある程度の段階まで進行すると、 URL を既読URLリストに追加します (既読化)。
[44] HTTPリダイレクトや HSTS などで URL が書き換わる場合には、 両方が追加されるのが一般的なのではないかと思われます。
[48] pushState
/replaceState
が影響するのかは不明です。
[11] private browsing での動作は実装依存です。
既読化が何も行わず、 :visited
に何も一致しない実装もあるようです。
[46] :visited
/:link
のレンダリングには、 既読URLリストにリンク先の
URL が含まれているか否かを利用します。
:visited
参照。[47] 既読URLリストの項目は、古くなったら自動的に削除されます。
[10] 昔の Webブラウザーには、何日経ったら削除するかの設定項目が用意されていました。
[4] ブラウザー拡張の history
API から削除もできます。
[5] 削除時には history
API の onVisitRemoved
が呼び出されます。
history
API[2] Chrome拡張の API chrome.history
は、訪問履歴にアクセスできるものです。
URL のみならず、訪問方法・日時などの情報も保持しているようです。
[7] 閲覧履歴はプライバシーに関わる情報であり、 fingerprinting vector でもあります。
[8] :visited
/:link
はレンダリングにこそ反映されますが、
著者のスクリプトからはアクセスできません。
:visited
参照。[12] 同じ起源のWebページを閲覧したことがあるかどうかは、
localStorage
に保存するなど、他のページと協調することで、
知れるようにすることができます。同じ起源でなくとも、
postMessage
などで情報交換の方法を予め用意しておけば、
知ることはできます。
しかし、完全な第三者の Webページを閲覧したことがあるかどうかは、取得できません。
[9] 閲覧文脈のセッション履歴と直接の連動関係にはありません。
[14] private browsing の場合など、セッション履歴中にあっても既読URLリストにはないことがあります。