11

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

fgfgfgghjh
  • 737
  • 2
  • 6
  • 6
  • 1
    Same answer here: http://stackoverflow.com/questions/3672726/make-an-event-happen-in-child-iframe-to-the-parent-window-in-javascript – Meetai.com May 28 '13 at 03:49

5 Answers5

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.

Andy E
  • 338,112
  • 86
  • 474
  • 445
  • I'd suggest that the non-lazy equivalent would *really* be `if(document.getElementById("myFrame").length==0){ document.getElementById("myFrame").contentWindow.myFunction(); };` – Jeromy French Jun 12 '14 at 17:47
  • @Jeromy: nope, both versions would throw the same error if `#myFrame` didn't exist in the same page. – Andy E Jun 13 '14 at 07:34
  • 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. – Jeromy French Jun 13 '14 at 14:10
  • This should be accepted as the answer. I like the lazy version ;) – Aster Veigas Feb 03 '16 at 06:01
3
$("iframe").each(function()
{
    $(this).one("load", function()
    {
        $(this)[0].contentWindow.myFunction();
    });
});

It is necessary to loaded iframe ;)

Gigoland
  • 1,287
  • 13
  • 10
3

Do it like a pro:

$("#myFrame").prop('contentWindow').abc();
MSS
  • 3,520
  • 24
  • 29
0

did you try?

top.frames['my_frame'].myFunc();
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

Alex Rashkov
  • 9,833
  • 3
  • 32
  • 58