Событие загрузки Turbolinks не работает при загрузке страницы - PullRequest
0 голосов
/ 01 мая 2018

У меня проблема с текущим значением по умолчанию для турболинков. Рекомендуемое событие загрузки :

document.addEventListener('turbolinks:load', function() {
  …
});

Что происходит, так это то, что это не срабатывает в Safari при загрузке страницы. Поэтому я добавил Turbolinks.dispatch("turbolinks:load"); к application.js.

Казалось, работает нормально. Но в Chrome он срабатывал автоматически, так что в итоге получился двойной выстрел события turbolinks:load.

Моим первым исправлением было срабатывание turbolinks:load только в браузерах без Chrome.

Но почему-то даже в Chrome некоторые представления не запускают turbolinks:load автоматически. Поэтому мне пришлось запустить его и по конкретным представлениям.

Окончательное решение, которое я нашел, было использовать:

$(document).on('ready turbolinks:load', function() {
  …
});

Кажется, это решает все проблемы, потому что оно запускается при первой загрузке или перезагрузке страницы, а также когда я нажимаю на ссылки. Он также стреляет из Chrome и Safari.

Есть ли лучший способ справиться с этим?

Документы говорят, что первая версия верна, но, похоже, это не так.

Я что-то упустил?

(примечание: использование jQuery не является для меня недостатком, и я знаю, что смогу реализовать это с парой document.addEventListener)

1 Ответ

0 голосов
/ 03 мая 2018

Как отмечается в комментариях, вы загружаете Turbolinks async. Turbolinks в настоящее время не работает хорошо при асинхронной загрузке. Поэтому лучший совет на данный момент - удалить атрибут async из тега script или использовать вместо него defer.

Почему?

Turbolinks прослушивает событие DOMContentLoaded при первой загрузке, а затем запускает turbolinks:load. При асинхронной загрузке сценарий может завершить загрузку / выполнение после анализа HTML и запуска DOMContentLoaded. В этом случае turbolinks:load не будет запущено.

В настоящее время существует проблема GitHub для обсуждения некоторых возможных решений для библиотеки, которые необходимо реализовать: https://github.com/turbolinks/turbolinks/issues/281

...