使用JavaScript获取IFrame innerHTML

| 我正在尝试使用以下代码获取IFrame内部HTML。
 <iframe src=\"http://www.msn.com\" 
         width=\"100%\" height=\"100%\" marginwidth=\"0\"
         scrolling=\"no\" frameborder=\"0\" id=\"divInfo\" 
         onreadystatechange=\"MyFunction(this);\"></iframe>   
JavaScript代码是
  function MyFunction(frameObj)
    {
        if (frameObj.readyState == \"complete\")
        {
            alert(frameObj.document.body.innerHTML); 
        }
    }
但是警报显示了当前文档的html。 frmae ready状态完成后,如何获取iframe的内部HTML。 如果我使用
alert(frameObj.contentWindow.document.body.innerHTML);
,则会显示拒绝访问错误。 提前致谢。     
已邀请:
        您无法读取“ 3”的内容,该“ 3”的内容来自与父页面不同的域。     
        拒绝访问错误是由相同的原始策略引起的。 由于您的网页托管在http://www.example.com/上(例如),因此,如果您尝试访问http://www.msn.com/上的详细信息,浏览器将不会允许您访问来自2个不同的域。 但是,如果您尝试从同一域访问数据-托管页面:http://www.example.com/index.html,则IFrame的页面:http://www.example.com/iframe.html ,那么您应该能够获取内容。 有关“同源起源策略”的更多信息,请访问以下链接:http://en.wikipedia.org/wiki/Same_origin_policy 顺便说一句,您可能要改用frameObject.contentDocument
<script type=\"text/javascript\">
function documentIsReady(frameObject) {
  alert(frameObject.contentDocument.body.innerHTML);
}
</script>
...并且您还可以使用onload代替onreadystatechange ...
<iframe src=\"iframe.html\" onload=\"documentIsReady(this);\"></iframe>
    
        只有遵循相同的原始策略(这意味着iframe与父文档位于同一服务器上),您才能执行此操作。 无论如何,这里回答了:)     
        如前所述,如果
<iframe>
的来源不是同一来源,您将无法获取它的内容。 这也适用于获取外部内容的大多数其他方式,例如使用ajax从另一个页面加载源代码。即:
$(\'#div\').load(\'http://www.google.com\');
要加载外部内容,该内容必须符合相同的原始政策。 这意味着内容必须在相同的协议和主机上。   上面链接的维基百科文章:      httpː// www.example.com / dir / page2.html->成功相同的协议和主机      httpː// www.example.com / dir2 / other.html->成功相同的协议和主机      httpː//用户名:password@www.example.com/dir2/other.html->成功相同的协议和主机      httpː// www.example.com:81 / dir / other.html->失败协议和主机相同,但端口不同      https://www.example.com/dir/other.html->故障不同协议      http://en.example.com/dir/other.html->故障不同的主机      http://example.com/dir/other.html->故障不同的主机(需要完全匹配)      http://v2.www.example.com/dir/other.html->故障不同的主机(需要完全匹配) 简而言之,它必须在同一网站上。因此,虽然
example.com/hello.html
可以加载
example.com/goodbye.html
的内容,但不能加载
google.com/content.html
的内容 另外,它必须在同一域中。子域被视为VOID相同的域策略,因此虽然
weebly.com/hello.html
可以加载
weebly.com/goodbye.html
的内容,但它不能加载
user1.weebly.com/content.html
的内容 当然,照常有一些解决方法,但这是另一个故事。实际上,这与问题非常相关。因此,在绕过它的所有方法上都有一个很好的问题“线程”。     

要回复问题请先登录注册