left.html<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Left</title>
</head><body style="background:#00CCFF">
leftFrame
<script language="javascript">
// alert(1);                                     // 添加alert后,可以显示document.write("a=" + a + " b=" + b);
// var tipBody = parent.mainFrame.document.body; 
var tipBody = parent.leftFrame.document.body;    // leftFrame可以显示,mainFrame不可以
var a = tipBody.clientWidth;
var b = tipBody.clientHeight;
document.write("a=" + a + " b=" + b);
</script>
</body>
</html>

解决方案 »

  1.   

     发表于:2008-06-05 01:19:03 楼主 
    好像网页加载速度太快,在left.html中,javascript调用到main.html中的body的长度等信息(mainFrame框架没有被获取)??? 先看代码:很简单的,  后面有提问. index.html HTML code
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>Index</title>
    </head>
    <frameset rows="80,*" cols="*" frameborder="no" border="1" framespacing="0">
        <frame src="top.html" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" />
        <frameset cols="180,*" frameborder="no" border="1" framespacing="0">
            <frame src="left.html" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame" title="leftFrame" />
            <frame src="main.html" name="mainFrame" id="mainFrame" title="mainFrame" />
        </frameset>
    </frameset>
    <noframes><body>
    </body>
    </noframes>
    </html>
    top.html HTML code
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>topFrame</title>
    </head>
    <body style="background:#3399FF">
    topFrame
    </body>
    </html>
    left.html HTML code
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>leftFrame</title>
    </head>
    <body style="background:#00CCFF">
    leftFrame
    <script language="javascript">
    function sayMainParm(){
        var tipBody = parent.mainFrame.document.body;
        var a = tipBody.clientWidth;
        var b = tipBody.clientHeight;
        document.write("a=" + a + " b=" + b); //不能显示
    }
    </script>
    </body>
    </html>
    main.html HTML code
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>mainFrame</title>
    <script>
    function sayParm(){
       parent.leftFrame.sayMainParm();
    }
    </script>
    </head>
    <body style="background:#CCCCCC" onload = sayParm()>
    mainFrame
    </body>
    </html>
     没测试,请自行测试一下.
     
      

  2.   

    测试可以显示但是有没有办法让mainFrame先加载,而且mainFrame在leftFrame的右边?
      

  3.   

    我的设计思路是:我设计了一个通用的js提醒函数,在任意页面框架中调用这个通用的js提醒函数的时候,都在mainFrame框架里提醒,需要mainFrame先创建。有没有办法让mainFrame先创建?
      

  4.   

    不能控制谁先加载,如果要获取mainFrame信息,只能加载完mainFrame再执行需要的函数
      

  5.   

    在left.html中有没有办法判断 mainFrame的存在?<script type="text/javascript" language="javascript">
    function chkFrame(){
    if(parent.rightFrame.document.body){
    tipBody = parent.rightFrame.document.body;
    doMyWork(); //有mainFrame后处理的事情
    }
    else{
    setTimeout("chkFrame()",1000);
    }
    }
    chkFrame();
    </script>
    以上代码,会出错率为50%
      

  6.   

    你用table来规划布局,然后在里面嵌入iframe,这里的iframe可以动态的写入,此时可以控制加载顺序。
      

  7.   

    呵呵,在left.html中的结尾部分延时1秒调用,OK了