私の答えは、リロード後に復元された焦点を当てた、Dom Christie's answerに基づいています。ページのhead
にno-preview
キャッシュディレクティブを追加し、それが所望の位置まで上からスクロールするとちらつきからページを防ぐために
レンダリングの直前にscrollPositionを取得します。
新しいページをレンダリングする前に現在のスクロール位置とアクティブなフィールド項目を格納し、次にレンダリングした後、その格納位置までスクロールしてフォーカスを復元します。保存されたスクロール位置とfocusIdをnullにリセットすることで、後続のページ読み込みが古い位置にスクロールしないようにします。/ Focus。
フォーカスを回復するには、フィールドにIDを割り当てる必要があります。私は、フォーム上のデータ・turbolinks-永久 '属性とそれを組み合わせる
setInterval(function() {
reloadWithTurbolinks();
}, 3000);
:
var reloadWithTurbolinks = (function() {
var scrollPosition;
var focusId;
function reload() {
Turbolinks.visit(window.location.toString(), {action: 'replace'})
}
document.addEventListener('turbolinks:before-render', function() {
scrollPosition = [window.scrollX, window.scrollY];
focusId = document.activeElement.id;
});
document.addEventListener('turbolinks:load', function() {
if (scrollPosition) {
window.scrollTo.apply(window, scrollPosition);
scrollPosition = null
}
if (focusId) {
document.getElementById(focusId).focus();
focusId = null;
}
});
return reload;
})();
次に、あなたがこのようにそれを呼び出すことができます。私も<meta name="turbolinks-cache-control" content="no-preview">
を使用します。