Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
46
rated 0 times [  50] [ 4]  / answers: 1 / hits: 102402  / 15 Years ago, sat, october 31, 2009, 12:00:00

I have a prototype representing a particual IFrame. That prototype have a function called GoToUrl(...) that opens the given url within the IFrame.



My question is: How do I create an InternalDOM property and make this property refer to the window object (the root DOM object) of the IFrame inside? In such way that: If my IFrame exposes a page which has an object X in it's window object I could do:



MyFrameObject.GoToUrl(pageXurl);
MyFrameObject.InternalDOM.X


Any help would be appreciated.



PS: I would accept answers not necessarily related to jQuery but I would prefer a jQuery solution.


More From » jquery

 Answers
32

To get the window object for a frame you can use the window.frames array:



var iframewindow= frames['iframe_name'];


This requires that you give the <iframe> an old-school name attribute instead-of-or-as-well-as the id. Alternatively if you know the order of iframes on the page you can index them numerically:



var iframewindow= frames[0];


It's generally more flexible to get the iframe window from the iframe element in the DOM, but this requires some compatibility code to cope with IE:



var iframe= document.getElementById('iframe_id');
var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;


jQuery defines the contents() method to grab the document node, but it doesn't give you a cross-browser way to go from the document to the window, so you're still stuck with:



var iframe= $('#iframe_id')[0];
var iframewindow= iframe.contentWindow? iframe.contentWindow : iframe.contentDocument.defaultView;


which isn't really a big win.



(Note: be very careful using jQuery for cross-frame-scripting. Each frame needs its own copy of jQuery and methods from one frame's copy won't necessarily work on nodes from the other. Cross-frame-scripting is a topic fraught with traps.)


[#98411] Tuesday, October 27, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
dominics

Total Points: 424
Total Questions: 99
Total Answers: 107

Location: South Korea
Member since Fri, Sep 11, 2020
4 Years ago
dominics questions
Wed, Apr 6, 22, 00:00, 2 Years ago
Thu, Jan 13, 22, 00:00, 2 Years ago
Fri, Sep 18, 20, 00:00, 4 Years ago
;