jQuery verwendet ein paar Tricks zu lösen dieses Problem.
Es verbindet sich mit sowie onload
.
// If IE event model is used
} else if (document.attachEvent) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent("onload", jQuery.ready);
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if (document.documentElement.doScroll && toplevel) {
doScrollCheck();
}
}
Darüber hinaus überprüft es kontinuierlich, ob die Seite gescrollt werden kann. Sobald das DOM geladen ist, wird die Seite scrollbar, so dass jQuery.ready
ausgelöst wird.
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if (jQuery.isReady) {
return;
}
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch(e) {
setTimeout(doScrollCheck, 1);
return;
}
// and execute any waiting functions
jQuery.ready();
}
Sie könnten versuchen, dieses Verhalten in Ihrer App zu implementieren oder jQuery direkt zu verwenden.
Sind Sie 100% sicher, dass dies der attachEvent-Teil ist und nicht das, was Sie in 'attach()' tun? –
ja. Ich stelle Alarm innerhalb von Attach, um zu sehen, dass es heißt. aber es ist nicht! – Himberjack
Was ruft Ihre Funktion auf, (function())() wird nicht selbst ausgeführt. –