现在有a.html,b.jsp两个页面  分别在两个不同的域名下
b.jsp <iframe> 在a.html 里面 ,现在要实现的是能让 b.jsp里面的数据自动增长...
如果a.html 和b.jsp在同一个域名下的时候 用 下面代码就解决了
不过现在在不同域名下的时候 
var a = parent.document.getElementsByTagName("IFRAME"); 
根本就读不到a,不知道有没办法。用其他方法能实现自动增长也行
希望告诉赐教function iframeAutoFit()   
    {   
        try  
        {   
            if(window!=parent)   
            {   
                var a = parent.document.getElementsByTagName("IFRAME");  
                alert(a+"=="+a.length); 
                for(var i=0; i<a.length; i++) //author:meizz   
                {   
                    if(a[i].contentWindow==window)   
                    {   alert(a[i].style.height);
                        var h1=0,w1=0, h2=0,w2=0, d=document, dd=d.documentElement;   
                        a[i].parentNode.style.height = a[i].offsetHeight +"px";    
                        a[i].style.height = "10px";    
                        if(dd && dd.scrollHeight) h1=dd.scrollHeight;   
                        if(dd && dd.scrollWidthHeight) h2=dd.scrollWidth;   
                        if(d.body) h2=d.body.scrollHeight;   
                        if(d.body) w2=d.body.scrollWidth;   
                        var h=Math.max(h1, h2);   
                        var w = Math.max(w1,w2);   
                        if(document.all) {h += 4;}   
                        if(window.opera) {h += 1;}   
                        a[i].style.height = a[i].parentNode.style.height = h +"px"; 
                        alert(a[i].style.height);    
                    }   
                }   
            }   
        }   
        catch (ex){}   
    }   
    if(window.attachEvent)   
    {   
        window.attachEvent("onload",  iframeAutoFit);   
        //window.attachEvent("onresize",  iframeAutoFit);   
    }   
    else if(window.addEventListener)   
    {   
        window.addEventListener('load',  iframeAutoFit,  false);   
        //window.addEventListener('resize',  iframeAutoFit,  false);   
    }   

解决方案 »

  1.   

    由于安全沙盒的限制,js是没有权限控制不在同一域名下的页面的因为iframe是a的元素,可以考虑a.html在b.jsp发生改变时调整iframe的高度
      

  2.   

    A,B双方不通 就只有
    通过第三方 C [服务器]了 A告诉 C要更新的内容
    C告诉B {由于WEB中C只能被动访问,那就只能 让 B进行 设定时间刷新 或者 AJAX}还有 就是2个页面用 APPLET 实现 SOCKET 不过这样 对页面的控制就差了
      

  3.   

    我是说
    <script src="http://www.otherdomain.com/test.js" 。不过跨域的JS调用好像也不允许。呵呵!
      

  4.   

    有关跨域的,转篇文章给你吧,哪里来的记不清了:以前看了几篇这方面的文章,但是都未能找到一个合适的解决方法。
    获取同一个域的数据,可以通过XMLHTTP组件或IFRAME来实现,不存在跨域访问的权限问题,因此比较简单。
    但如果要访问不同域的数据时,由于浏览器的安全设置,XMLHTTP没有权限获取数据,而IFRAME没有权限将获取的数据传递给父窗口,似乎没有其它解决办法。
    在网上提到的方法,不外乎这两种: 
    1. 如果要获取的数据位于同一个根域但是不同子域时,可以在脚本中指定document.domain为父域。 
    2. 如果要获取的数据位于不同的根域时,则可以在服务器上写一个脚本作为代理,由服务器上的脚本获取不同域的数据,然后传递给在同一个域中的网页。
    以上两种方法很容易便能想到,现在的问题是,如果要获取一个不同根域的数据时,该如何实现? 
    一般我们不会漫无目的地去网上获取数据,往往是从指定的服务器上获取数据,就像Google Maps、Google Adsense和referer这样的网页插件,一般都是以脚本的形式提供给用户使用的。这时,如果要求用户在自己的服务器上写个代理的话,易用性就要大打折扣。获取你会考虑为用户写好各种脚本的代理,PHP、ASP、Python、Perl……,但是,如果这台服务器不支持动态脚本,又该怎么办呢?
    想了两天都没想通这个问题(除去上班时间其实不到两个小时),曾考虑过用浏览器的漏洞来实现,但是这样做不能长久,因此放弃。随后发现Google本地搜索的地图数据来自于mapabc.com,好家伙,他们是怎么办到的?
    用FireFox的DOM查看器可以看到,地图区是一个IFRAME,难道是用IFRAME实现的?但是拖动地图时如何知道要下载哪些图片的?这些数据是一定要从服务器上获取的,难道放这些数据的服务器也是google.com域内的?应该不会这么麻烦。
    随即找来Google Maps的API进行开刀,官网给的范例网页如下:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=abcdefg"
    type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[function load() {
    if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(37.4419, -122.1419), 13);
    }
    }//]]>
    </script>
    </head>
    <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 500px; height: 300px"></div>
    </body>
    </html>
    把http://maps.google.com/maps?file=api&v=2&key=abcdefg下载下来看了一下,里面有一句:
    GScript("http://maps.google.com/mapfiles/maps2.67.api.js");
    这句就是用来加载地图操作库的,GScript函数定义为:
    function GScript(src) {document.write('');}
    顿悟……
    网页内引用不同域的脚本并不会提示权限不足,对了,就是它没错!
    这个方法其实我早应该想到的,可能是太久没玩javascript的缘故吧。不论是referer还是Google Analytics,要统计页面访问信息,都要用脚本来向服务器提交信息,只是它们只提交一次(Google Analytics有统计逗留时间,应该有好几次)。习惯性地,我把提交和下载数据分开了,所以不容易想到这个方法。
    但是用document.write始终不是好办法,它会清除页面上原有的内容。改进的方法估计你已经想到了,可以参考一下我很早以前乱写的这篇文章《有效地组织页面中复杂的JavaScript脚本》里的思想。
    继续分析Google Maps的代码,打开http://maps.google.com/mapfiles/maps2.67.api.js,里面有这样的代码:
    ta.prototype.Hk=function(a,b){var c=this.ql(a);if(c){window.setTimeout(function(){b(c)},
    0)}else{var d="__cg"+Zf++ +(new Date).getTime();try{if(this.qe==null){this.qe=document.getElementsByTagName("head")[0]}var e=window.setTimeout(sd(d,b,a,403),15000);if(!window.__geoStore){window.__geoStore={}}window.__geoStore[d]=Jf(this,d,b,e);var f=document.createElement("script");f.type="text/javascript";f.id=d;f.charset="UTF-8";f.src=this.vl+"?q="+window.encodeURIComponent(a)+"&output=json&callback=__geoStore."+d+"&key="+this.Lh;this.qe.appendChild(f)}catch(g){if(e){window.clearTimeout(e)}window.setTimeout(sd(d,
    b,a,500),0)}}};
    script节点也是动态创建的,这样就可以避免document.write产生的问题。 
    解决方法找到了,现在来简单测试一下:
    1. 在本地服务器上新建一页面。
    test.html:
    <html>
    <head>
    <title> Over-Domain Data Fetching Test Page</title>
    <script type="text/javascript">
    var lastScript;
    var h=document.getElementsByTagName("head")[0];</code>function loadScript(url){
    var f=document.createElement("script");
    var d=new Date().getTime();
    f.type="text/javascript";
    f.id=d;
    f.src=url+'?'+d;
    h.appendChild(f);
    if(lastScript&&g(lastScript))g(lastScript).parentNode.removeChild(g(lastScript));
    lastScript=d;
    }function g(x){return document.getElementById(x)};
    </script>
    </head><body>
    <button onclick="loadScript('http://localhost/alert.js')">Test Alert</button><br />
    <button onclick="loadScript('http://localhost/info.js')">Get My Info</button><br />
    My Name: <input id="myname" type="text" value="" /><br />
    My Blog: <input id="myblog" type="text" value="" />
    </body>
    </html>
    解释两个关键点:
    1. lastScript用于存放上次建立的script节点的ID,在下次要再新建script节点时,要删除上次建立的节点,以免加载的脚本越来越多,占用过多的内存。
    2. url后面加了一个数值d是为了防止浏览器缓存脚本数据,在本例中可以不加,但是如果脚本是由服务器动态生成的,那最好加上。
    然后再建立两个javascript脚本用于测试:
    alert.js:
    alert('You can see me!');
    info.js:
    g('myname').value='Hily Jiang';
    g('myblog').value='http://hily.iyi.cn/';
    好了,把它们放在本地服务器的根目录下,敲入http://127.0.0.1/test.html,这样它和localhost就不在同一个域内了。
    点击“Test Alert”,应该会弹出对话框显示You can see me!。
    点击“Get My Info”,应该会在文本框中显示我的信息。
    (以上测试页在IE 6.0和FireFox1 .5.0下测试通过。)
      

  5.   

    看来真没办法了啊
    那如QQ,csdn的新闻,都是在不同域名下吧,,
    他们新闻的评论是怎么实现自增长的呢???
      

  6.   

    问题勉强解决
    在两个页面的前面都加上句:<script>document.domain="**.com";</script>
    我只跨了二级域名
      

  7.   

    mar,跨域的难题,只有看的份了