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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.