Это всего лишь мокап, который я накидал за 20 минут "на коленке" и он требует доработки, но уже сейчас этот js-скрипт позволит простым сайтам работать без перезагрузки страниц.
Для примера, можно сёрфить по нодам в блоге или переходить из редактирования ноды в режим просмотра ноды. В большей степени, продолжают корректно работать ajax-ссылки, созданные, например, с помощью views.
Код
$('a:not(.use-ajax)').click(function () {
var url = $(this).attr('href');
if (url && url != '#') {
$('html').load(url, {}, function (html, status, request) {
if(status == 'success') {
window.history.pushState("object or string", "Title", url);
}
});
return false;
}
});
Проблемы
Сейчас я нашел несколько проблем:
-
Не работает "Admin menu" при кэшировании на клиенте
- Главная проблема: весь приходящий html записывается в body, что не позволяет использовать метатеги и менять заголовок во вкладке.
То, что работает
- Работает загрузка страниц внутри одной темы
- Работает Drupal-ajax. В частности, проверял работу ссылок с использованием класса use-ajax.
P.S.
- Не стоит рассматривать этот скрипт как продакшн-версию. Но может быть с помощью прохожих и великой силы комментариев мы, таки сможем превратить это в рабочий скрипт.
- Существуют другие технологии делающие тоже самое:
- Модуль Ajax pages
- Пост Simple Drupal AJAX load with jQuery and delivery callback англ.
- Модуль RefreshLess (Drupal 8)
- Ruby on Rails имеет очень популярный гем Turbolinks , который отлично справляется с этой задачей