<div id="login-form-log" style="top: 40px; ">
<iframe id="resultFrame" name="resultFrame"  height="300" width="600"   src="">
</iframe>
</div>  网上找了一下,以下方法好像不行,请问应该怎么获取iframe里面的内容
var doc;
if(document.all){//IE
doc = document.frames["resultFrame"].document;
}else{//Firefox
doc = document.getElementById("resultFrame").contentDocument;
}
var resultValue = doc.body.innerHTML;

alert(resultValue);

解决方案 »

  1.   

    这个是不行的,只能在iframe里的子页面里面获取和操作父页面的内容,反之不行,这是安全性要求,理所必然
      

  2.   

    同域或跨子域读写操作 iframe 里的内容父页面读写操作子页面:
    <iframe id="test-iframe" name="test-iframe" src="child.html" scrolling="no" frameborder="0"></iframe><script>
    window.onload = function () {
      /*
       *  下面两种获取节点内容的方式都可以。
       *  由于 IE6, IE7 不支持 contentDocument 属性,所以此处用了通用的
       *  window.frames["iframe Name"] or window.frames[index]
       */
      var d = window.frames["test-iframe"].document;
      d.getElementsByTagName('h1')[0].innerHTML = 'pp';
      alert(d.getElementsByTagName('h1')[0].firstChild.data);
    }
    </script>注:在请务必通过 window.onload 方法访问 iframe 中的节点,否则浏览器会提示错误-拒绝访问。在 IE8, Firefox3.6, Opera11 下在 DOMReady 时也可以访问 iframe 中的节点。子页面读写操作父页面:<script>
      parent.document.getElementsByTagName('h1')[0].innerHTML = 'pp';
      alert(parent.document.getElementsByTagName('h1')[0].firstChild.data);
    </script>
    小结:1 测试通过 IE6, IE7, IE8, Firefox2.0, Firefox3.0, Firefox3.6, Chrome8, Opera11, Safari5.
    2 查阅资料得出 document.getElementById(‘id name’).contentDocument 全等于 window.frames["iframe Name"].document.
    3 跨子域时,需要在父页面和子页面 JS 中分别加上 document.domain = 'xxx.com';
    跨域操作 iframe 里内容当两个网页所在域不同时,要实现数据的互相调用,只能通过 JS 改变 location 对象的 hash 属性的值来做到互相通信。父页面:
    <iframe id="test-iframe" src="http://www.yyy.com/child.html" scrolling="no" frameborder="0"></iframe>
    <input type="button" value="send" onclick="sendRequest()" /><script>function sendRequest() {
      document.getElementById('test-iframe').src += '#a';
    }var interval = window.setInterval(function(){
      if(location.hash) {
        alert(location.hash);
        window.clearInterval(interval);
      }
    },1000);</script>
    子页面:<h1>RRRRRR</h1><script>
    var url = 'http://www.xxx.com/father.html';
        oldHash = self.location.hash,
        newHash,
        interval = window.setInterval(function(){
            newHash = self.location.hash;
            if(oldHash != self.location.hash) {
            document.getElementsByTagName('h1')[0].innerHTML = 'pp';
            //alert(parent.location.href); //去掉这个注释,浏览器会提示无权限
            parent.location.href = url + '#b';
              window.clearInterval(interval);
            }
        },500);
    </script>小结:1 经测试 IE6, IE7, IE8, Firefox2.0, Firefox3.0, Firefox3.6, Chrome8, Opera11, Safari5, 除 IE6, IE7 外只要改变 hash 就会记录在浏览器 history 中。
    2 我有试图在子页面用 parent.location.replace 的方法来避免父页面向服务器发送请求而进行跳转,这样理论上浏览器就不会记录历史,但未能奏效。
    2 子页面无权读取父页面的 url, 但可以对父页面的 url 进行写操作,所以跨域操作时,要提前得知父页面的url