views_ajax_history_toggle
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
- Drupal 10 or 11
- Views (included in Drupal core)
Getting started
composer require drupal/views_ajax_history_toggle drush en views_ajax_history_toggle
Then 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.
Supporting organizations
Development and maintenance sponsored by erdfisch.