11

How to call a function in an iframe from the parent page?

1

5 Answers 5

19

As long as the framed page is on the same domain (or on a sub-domain, and you're setting document.domain), you need to access the contentWindow property of the frame element. For example:

$("#myFrame")[0].contentWindow.myFunction(); // or, if jQuery hasn't made you lazy document.getElementById("myFrame").contentWindow.myFunction(); 

Most browsers also support contentDocument, but Internet Explorer doesn't. If your framed page is on a different domain then you'll get an Access Denied error.

Sign up to request clarification or add additional context in comments.

4 Comments

I'd suggest that the non-lazy equivalent would really be if(document.getElementById("myFrame").length==0){ document.getElementById("myFrame").contentWindow.myFunction(); };
@Jeromy: nope, both versions would throw the same error if #myFrame didn't exist in the same page.
I see what you mean...$("#myFrame")[0] returns undefined, which of course has no methods. I was thinking $("#myFrame")..., but that's not how this works. Thanks for setting me on the right path.
This should be accepted as the answer. I like the lazy version ;)
3
$("iframe").each(function() { $(this).one("load", function() { $(this)[0].contentWindow.myFunction(); }); }); 

It is necessary to loaded iframe ;)

Comments

3

Do it like a pro:

$("#myFrame").prop('contentWindow').abc(); 

Comments

0

did you try?

top.frames['my_frame'].myFunc(); 

1 Comment

It's javascript, you don't necessary need jquery
0

You can select the iFrame using its id

document.getElementById(iframeId).contentDocument 

but I am not sure you can access its JavaScript, especially if child iFrame is from different domain

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.