Bug Tracker

Opened 16 years ago

Last modified 10 years ago

#390 closed bug

Can't attach IFrame's load event/IE7 — at Version 4

Reported by: Andrey Skvortsov Owned by:
Priority: major Milestone: 1.1.3
Component: event Version: 1.1a
Keywords: Cc:
Blocked by: Blocking:

Description (last modified by joern)

Try:

var d= document.createElement( "iframe");
$(d).load( function(){alert("ok");});
d.src="";
document.body.appendChild(d);

$(d).bind(...) dosen't work too.

but standard d.attachEvent("onload",...) works fine.

Change History (4)

comment:1 Changed 16 years ago by joern

Component: ajaxevent
Version: 1.0

comment:2 Changed 16 years ago by john

Milestone: 1.1
Version: 1.1

comment:3 Changed 16 years ago by Dave

Just a few notes from some investigations.

The onload event actually belongs to the window object, not the document object; document.onload is an alias for window.onload.

There was this curious comment in jQuery.event.add but d.setInterval==undefined for this case and it may be unrelated anyway:

// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
	element = window;

I tried a few other methods, each one by itself to prevent interference; one or both were broken on either IE7 or FF2:

var d= document.createElement( "iframe");
// Tried this and d.src = "http://www.yahoo.com" --nope
d.src="";
// Tried appending first to see if it helped --nope
document.body.appendChild(d); 

// FF2: ok; IE7: Never fires
//$(d).bind("load", function(){alert("ok0");});

// IE7 & FF2: Fires before "done"
//$(d).ready(function(){alert("ok1");});

// FF2: unsupported; IE7: ok
//d.attachEvent("onload", function(){alert("ok2");});

// FF2: ok; IE7: Never fires
//d.onload = function(){alert("ok3");};

// FF2: Never fires; IE7: Fires twice, "interactive" "complete"
//d.onreadystatechange = function(){alert("ok4 "+d.readyState)};

// IE7 & FF2: Never fires
//$(d).bind("onreadystatechange", function(){alert("ok5 "+d.readyState)});

// IE7: Never fires; FF2: Permission Denied exception
//$(d).bind("click", function(){alert("ok6");});

alert("done");

That's as far as I could get.

comment:4 Changed 16 years ago by joern

Description: modified (diff)
Note: See TracTickets for help on using tickets.