我想让iframe页面(main.asp)自动刷新,但是当用户点击某个A link 或 鼠标移出iframe外 后能自动延时9秒种。
我在框架页(index.asp)上定义了iframe的事件onclick和onmouseout,并且在刚开始的时候有效。但是当iframe刷新后,那些事件就失效了。在网上找了大半夜,都没有答案(也许我搜索方法不对,请高手指正),郁闷了半个晚上 -\-附index.asp部分代码:<iframe src="main.asp"  border="0"  width="100%" height="1200" SCROLLING="yes" frameborder="0" marginwidth="1" marginheight="1" name="content1"></iframe>
<script language="javascript">
var delaytime,timename;
delaytime = 3000;
staytime = 0;//延时功能实现变量
addtime = 3;//每点击一次<A link>增加addtime*delaytime秒钟的等待时间

setInterval('shuaxin()',delaytime);
function shuaxin(){//判断是不刷新,英文不好
var grade = GetCookie("gbook").grade;//06net2
if ("" == grade && staytime-- <= 0){
window.frames[0].location.href="main.asp";
}
}

document.body.onclick = function(){//用户在父面上点击,加延时
staytime = addtime;
}
document.body.onload = function(){//填加iframe的事件处理函数,但是在iframe刷新后,就失效了,,,
document.frames[0].document.body.onclick=function(){   
staytime = addtime;
}   
document.frames[0].document.body.onmouseout=function(){   
staytime = addtime/2;
}   
}

/**/////////
//摘自csdn.com论坛,详见:http://topic.csdn.net/u/20081021/10/09d513d5-051e-4e1c-9093-5ab3e082d8f0.html
    function GetCookie(name)//取cookie值,返回的是一个JSON数组;类似于 response.cookie["book"]下的所有子对象——王永安 释
    {
        m=document.cookie;
        re1=new RegExp("(?!\w)"+name+"=[^;]+","");
        re2=new RegExp("^"+name+"=","");
        try
        {          
            var a=m.match(re1)[0];
        }
        catch(e)
        {
            return null
        }
        eval("var o="+a.replace(re2,"{").replace(/&/g,"',").replace(/=/g,":\'")+"'}");
        return o;
    }
</script>这是我第一次提问,不懂规矩之处多多指点。

解决方案 »

  1.   

    document.frames[0].document.body.onclick
    现在iframe的document已经不是原来那个document了,那个onclick自然也不再起作用.
      

  2.   

    按照benjamin_liu的提示,我作了如下修改,增加了setInterval('relod()',200);//不停注册iframe事件,  无奈的解决方法还是无效
    还提示:relod()函数里的: 'document.frames.0.document.body' 为空或不是对象   var delaytime,timename;
    delaytime = 3000;
    staytime = 0;
    addtime = 3;//每点击一次<A link>增加addtime*delaytime秒钟的等待时间

    setInterval('shuaxin()',delaytime);
    setInterval('relod()',200);//注册iframe事件,  无奈的解决方法还是无效
    function shuaxin(){
    var grade = GetCookie("gbook").grade;//06net2
    if (!grade && staytime-- <= 0){
    window.frames[0].location.href="main.asp";
    }
    } document.body.onload = function(){
    document.frames[0].document.body.onload = relod();
    }

    function relod(){//重新注册iframe事件的函数
    document.frames[0].document.body.onclick = function(){   
    staytime = addtime;
    ts();   
    }   
    document.frames[0].document.body.onmouseout=function(){
    ts();
    staytime = addtime/2;
    }   
    }
    function ts(){//用于test,返回事件绑定的函数代码
    ////
    document.getElementById("ts").innerHTML += "*"+document.frames[0].document.body.onclick+"<br />";
    }
      

  3.   

    看来我第一次提问,说得有点啰嗦,现把问题重新说一遍:问题重诉:1。iframe的事件能否冒泡到父页面中捕获?2。如果要在父页面上绑定iframe的事件,可以成功,但是iframe页面一刷新或跳转,
      则父页面上绑定的事件便失效了,有没有办法解决?在不修改子页面代码的前提下
    感谢你的关注。
      

  4.   

    在父窗口中写iframe的onload事件,在onload事件中绑定iframe中对应控件的事件即可.
    这样,iframe中不用修改代码.
      

  5.   


    能不能具体点说,比如举例子我用过这样的
    document.frames[0].document.body.onload = function(){……}
    这句经常会报“document.frames.0.document.body”为空或不是对象