A click on chosen links before JavaScript events have been applied to them will be put in a queue and called when all event handlers are in place. That will take 5 seconds, since there's a delay applied to a script applying the events.
Script loaded: false
Go to robertnyman.com (click on this won't be prevented)
A click on this image will be prevented, and then called when its events have been applied
Code used
clickCatcher
// By Robert Nyman, http://robertnyman.com/clickcatcher/ - This content is released under the (Link Goes Here) MIT License: http://www.opensource.org/licenses/mit-license.php (function () { function addEvent(elm, evt, func) { if (elm.addEventListener) { elm.addEventListener(evt, func, false); } else { elm.attachEvent(("on" + evt), func); } } function removeEvent(elm, evt, func) { if (elm.removeEventListener) { elm.removeEventListener(evt, func, false); } else { elm.detachEvent(("on" + evt), func); } } // fireEvent by Jehiah Czebotar, http://jehiah.cz/archive/firing-javascript-events-properly function fireEvent(element, event) { var evt; if (document.createEvent) { // dispatch for firefox + others evt = document.createEvent("HTMLEvents"); evt.initEvent(event, true, true ); // event type,bubbling,cancelable return !element.dispatchEvent(evt); } else { // dispatch for IE evt = document.createEventObject(); return element.fireEvent('on'+event,evt); } } clickCatcher = function () { var clicks = [], addClicks = function (evt) { var classCheck = /catch/, body = /body/i, target = (evt.target)? evt.target : evt.srcElement; while (!classCheck.test(target.className) && !body.test(target.nodeName)) { target = target.parentNode; } if (classCheck.test(target.className)) { clicks.push(target); if (evt.preventDefault) { evt.preventDefault(); } evt.returnValue = false; return false; } }, callClicks = function () { removeEvent(document, "click", addClicks); for (var i=0, il=clicks.length; i<il; i++) { fireEvent(clicks[i], "click"); }; }, init = function () { addEvent(document, "click", addClicks); // Could be called here, but now called manually in script loaded later - adapt to your situation //addEvent(window, "load", callClicks); }; return { init : init, callClicks : callClicks }; }(); clickCatcher.init(); return clickCatcher; })();
Page-specific script in this demo (in the clicks.js file)
var scriptLoaded = document.getElementById("script-loaded"), imageLink = document.getElementById("image-link"); // Shows when the script is loaded scriptLoaded.innerHTML = "true"; scriptLoaded.className = "loaded"; // Assigns click event to it imageLink.onclick = function () { if (confirm("Sure you want to go to the image page?")) { location.href = imageLink.href; } return false; }; // Call callClicks of clickCatcher clickCatcher.callClicks();