About
Views AJAX History Toggle adds a per-display option to the Views UI that controls
whether AJAX interactions — paging, exposed filters, table sorting — update the
browser URL via history.replaceState().
Since Drupal 10.1, ViewAjaxController automatically appends a
SetBrowserUrl AJAX command to every AJAX-enabled View response,
keeping the address bar in sync with the current filter and pager state. This
is exactly right for full-page search or listing views. For embedded,
block, or secondary views — think a sidebar facet list, an off-canvas
tray, or a second view on the same page — the unconditional URL update breaks
back-button behaviour and can cause multiple views to overwrite each other's
URL changes. This module fills that gap.
Features
- Adds an AJAX history toggle to the Other section of every Views display.
- Defaults to Enabled — zero configuration required for existing views.
- Works per display, so a single view can have history enabled on its page display and disabled on its block display.
- Implemented as a Display Extender + event subscriber: no core overrides, no patches.
- Backward-compatible: displays without the option stored (created before the module was installed) behave as if the option is enabled.
- Automatically registers and deregisters the display extender on install/uninstall.
Requirements
- Views (included in Drupal core)
Getting started
Open any AJAX-enabled View in the UI, find AJAX history
under the display's Other section, and uncheck
Enable AJAX history for any display where you want URL updates
suppressed.
Project information
- Project categories: Content display, Developer tools, Site structure
3 sites report using this module
- Created by hydra on , updated
Stable releases for this project are covered by the security advisory policy.
Look for the shield icon below.

