129

How can I access the content of an iframe with jQuery? I tried doing this, but it wouldn't work:

iframe content: <div id="myContent"></div>

jQuery: $("#myiframe").find("#myContent")

How can I access myContent?


Similar to jquery/javascript: accessing contents of an iframe but the accepted answer is not what I was looking for.

1
  • I just found that the built-in $ variable in Firefox console does not look like a complete jQuery at all. (I figured this after realizing that I do not have the jQuery variable either, then figuring that I did not load jQuery's source code). Commented May 9, 2017 at 15:12

3 Answers 3

243

You have to use the contents() method:

$("#myiframe").contents().find("#myContent") 

Source: https://web.archive.org/web/20180608003357/http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/

API Doc: https://api.jquery.com/contents/

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

9 Comments

give me error: Error: Permission denied to access property 'ownerDocument'
ime: Its probably giving you error because of following reasons: 1) Iframe doesn't belong to same domain. 2) You are trying to read it before Iframe load event.
Is there a way to verify if the iframe content is from the same domain, prior to trying to access it and getting an error?
The source url is broken.
@jperezmartin: You will have to use some javascript library that will transfer information between main page and iframe. Basically its been denied by browser because of Cross Browser functionality. I am sorry, I am not aware of any such library because I never required it.
|
24
<html> <head> <title></title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript"> $(function() { //here you have the control over the body of the iframe document var iBody = $("#iView").contents().find("body"); //here you have the control over any element (#myContent) var myContent = iBody.find("#myContent"); }); </script> </head> <body> <iframe src="mifile.html" id="iView" style="width:200px;height:70px;border:dotted 1px red" frameborder="0"></iframe> </body> </html> 

Comments

18

If iframe's source is an external domain, browsers will hide the iframe contents (Same Origin Policy). A workaround is saving the external contents in a file, for example (in PHP):

<?php $contents = file_get_contents($external_url); $res = file_put_contents($filename, $contents); ?> 

then, get the new file content (string) and parse it to html, for example (in jquery):

$.get(file_url, function(string){ var html = $.parseHTML(string); var contents = $(html).contents(); },'html'); 

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.