@@ -92,11 +92,25 @@ if (elem) {
9292 } ;
9393 } ;
9494
95- // Bind on ready callback.
95+ // Bind on ready callbacks to DOMContentLoaded (native js) and turbolinks:load
96+ // Turbolinks replaces the body and merges the head of an HTML page.
97+ // Since the body is already loaded (DOMContentLoaded), the event is not triggered.
9698 if ( doc . addEventListener ) {
97- doc . addEventListener ( 'DOMContentLoaded' , onReady , false ) ;
98- doc . addEventListener ( 'DOMContentLoaded' , proxyAjaxOpen , false ) ;
99- doc . addEventListener ( 'DOMContentLoaded' , proxyAjaxSend , false ) ;
99+ // This ensures that all event listeners get applied only once.
100+ if ( ! window . __debugKitListenersApplied ) {
101+ // The DOMContentLoaded is for all pages that do not have Turbolinks
102+ doc . addEventListener ( 'DOMContentLoaded' , onReady , false ) ;
103+ doc . addEventListener ( 'DOMContentLoaded' , proxyAjaxOpen , false ) ;
104+ doc . addEventListener ( 'DOMContentLoaded' , proxyAjaxSend , false ) ;
105+
106+ // turbolinks:load is the alternative DOMContentLoaded Event of Turbolinks
107+ // https://github.com/turbolinks/turbolinks
108+ // https://github.com/cakephp/debug_kit/pull/664
109+ doc . addEventListener ( 'turbolinks:load' , onReady , false ) ;
110+ doc . addEventListener ( 'turbolinks:load' , proxyAjaxOpen , false ) ;
111+ doc . addEventListener ( 'turbolinks:load' , proxyAjaxSend , false ) ;
112+ window . __debugKitListenersApplied = true ;
113+ }
100114 } else {
101115 throw new Error ( 'Unable to add event listener for DebugKit. Please use a browser' +
102116 'that supports addEventListener().' ) ;
0 commit comments