Closed Bug 804942 Opened 12 years ago Closed 12 years ago

Cross-frame javascript call fails after iframe moved by appendChild()

Categories

(Core :: DOM: Core & HTML, defect)

19 Branch
x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 170799

People

(Reporter: bugzilla, Unassigned)

Details

User Agent: Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/19.0 Firefox/19.0 Build ID: 20121023030553 Steps to reproduce: Here is a test case that exhibits the problem. Load main.html into the browser, and press successively on "Execute", "Move" and "Execute" : === main.html === <?xml version="1.0" encoding="cp1252"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <title></title> </head> <body> <button id="execute">Execute</button> <button id="move_iframe">Move</button> Press Execute, Move, Execute while looking at the integrated console. <div id="first"> <iframe id="movable_iframe" name="frame1" src="frame1.html"></iframe> </div> <div id="second"> </div> <script type="text/javascript"> function move_iframe() { var elem; elem = document.getElementById("movable_iframe"); document.getElementById("second").appendChild(elem); } function execute() { // should output something to the console. window.frames.frame1.example(); } function init() { document.getElementById("execute").addEventListener("click", execute); document.getElementById("move_iframe").addEventListener("click", move_iframe); } init(); </script> </body> === frame1.html === <?xml version="1.0" encoding="cp1252"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <title></title> <script type="text/javascript"> function example() { console.log("success"); } </script> </head> <body> </body> Actual results: Pressing "Execute" first displays correctly "success" in the console. Pressing "Move" moves the iframe into the #second div. Pressing "Execute" again shows an error in the console, instead of "success". The error with the nightly build is : [09:48:05.823] NS_NOINTERFACE: Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsIInterfaceRequestor.getInterface] @ resource://gre/modules/PrivateBrowsingUtils.jsm:17 The problem also exists in Firefox 16.0.1, but the error message is different. Interestingly, the first press on "Execute" is required : pressing just "Move" then "Execute" don't cause any problem. It is the sequence Execute-Move-Execute that fails. Expected results: The second press on "Execute" should have printed "success" in the console, without any error.
Component: Untriaged → DOM
Product: Firefox → Core
duplication of bug 575321 and Bug 170799
"delete window.frames.frame1" helps as follows function move_iframe() { var elem; elem = document.getElementById("movable_iframe"); + delete window.frames.frame1; document.getElementById("second").appendChild(elem); }
Status: UNCONFIRMED → RESOLVED
Closed: 12 years ago
Resolution: --- → DUPLICATE
Deleting the frame indeed solves my problem. Thank you !
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.