Я испытал это раньше, и виновником была плохая реализация Turbolinks (с моей стороны).
Я должен был изучить правильный способ заставить Turbolinks работать (я включил мои учебные ресурсы в нижней части) ... посмотрите видео Райана Бейтса , чтобы узнать, как выглядит правильно работающая реализация.
Проблема / Виноват:
Это Javascript.Как описано на странице Turbolinks Github ...
При использовании Turbolinks страницы будут меняться без полной перезагрузки, поэтому нельзя полагаться на DOMContentLoaded или jQuery.ready () длявызвать ваш код.Вместо этого Turbolinks запускает события в документе, чтобы обеспечить привязку к жизненному циклу страницы.
В основном все, что подразумевает « запуск после загрузки DOM / страницы », будет прерываться / не работать- как и ожидалось ... это приведет к тому, что Turbolinks не будут эффективными.А так как Turbolinks терпит неудачу, ваш браузер дважды загрузит страницу (проверьте логи / консоль), чтобы скрыть проблему для вас.
В моем случае я смог заметить вышеупомянутое поведение в «режиме инкогнито»... весь мой Javascript, который зависел от документа / DOM / page-ready .... сломался.Итак ...
Решение:
Если у вас есть что-то подобное в вашем javascript (ниже) ...
$(function() {
alert("DOM is ready!");
});
$(document).ready(function() {
alert("DOM is ready!");
});
jQuery(document).ready(function() {
alert("DOM is ready!");
});
Изменить наэто ...
$(document).on('page:change', function() {
alert("DOM is ready!");
});
Турболинки на самом деле не запрашивают совершенно новую страницу, поэтому вы заметите, что ваш Javascript работает только при полной загрузке страницы, но не при нажатии на ссылку с включенной турболинкой.
Это означает, что мы должны полагаться на Turbolinks для определения того, что DOM готов на самом деле.
На мой взгляд, текущие ответы (могут) неверны, так как у меня Chromeрасширения, пробелы и мои проблемы исчезли.
Дополнительная информация: