Turbolinksを有効にしたいが、特定のリンク間でしか有効にしたくないケースがある。
page:before-change
は Cancellableだとドキュメントにあるので、event.data.urlに遷移しようとするリンクが入っているので、この情報をみてpreventDefault するかどうか決める。
タイトルでホワイトリストといってるが実装は正直何でもいい。正規表現でもいい。
// cancel state change by whitelist
const ALLOWABLE_LINKS = [
'/foo',
/'bar'
];
window.addEventListener('page:before-change', e => {
if (!ALLOWABLE_LINKS.some(link => link === e.data.url) ) {
e.preventDefault();
location.href = e.data.url;
}
return true;
});