Bug Tracker

Modify

Ticket #390 (closed bug: fixed)

Opened 7 years ago

Last modified 14 months ago

Can't attach IFrame's load event/IE7

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

Description (last modified by joern) (diff)

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

comment:1 Changed 7 years ago by joern

  • Version 1.0 deleted
  • Component changed from ajax to event

comment:2 Changed 7 years ago by john

  • Version set to 1.1
  • Milestone set to 1.1

comment:3 Changed 6 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 6 years ago by joern

  • Description modified (diff)

comment:5 Changed 6 years ago by aaron.heimli

I have noticed, in FF 2.0, that attaching events to new windows that load content from a different domain (for example,  http://mysite.com has a link that uses window.open() to load  http://www.yahoo.com) is pretty much impossible because of the "same origin policy"(1). Perhaps this is related?

(1)  http://www.mozilla.org/projects/security/components/same-origin.html

comment:6 Changed 6 years ago by john

  • need set to Test Case

comment:7 Changed 6 years ago by joern

Related to #939?

comment:8 Changed 6 years ago by brandon

  • Status changed from new to closed
  • Resolution set to fixed

With the move to DOM Level 2 event handlers in the latest SVN this is now resolved as much as possible.

Please follow the  bug reporting guidlines and use  jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

View

Add a comment

Modify Ticket

Action
as closed
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.