以下代码实现的需求是:判断是否网络在线,如果在线就加载网络地址;如果不在线就加载本地页面。
这个代码只能在客户端执行,不能使用服务器端代码
问题:
1、如果加alert语句,则结果是正确的,如果注释掉,则结果不对,很奇怪。请各位大侠看看,有啥毛病,在线等待。
2、运行这个代码时,IE6提示“限制此文件的显示”,只有选择“允许阻止的内容”,才能执行,不知这个与哪个语句有关,怎么避免?以下代码存成html文件,可以直接在浏览器中运行。<script language="javascript">
var isonline; //判断是否网络在线 online:在线  offline:不在线
</script><!--利用img的加载,判断是否在线-->
<img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif"  onload="isonline='online'" onerror="isonline='offline'" /><iframe name=ifr_top_ad src="" name="top_ad" marginwidth="0" marginheight="0" align="middle" scrolling="no" frameborder="0" width="100%" height="90px"></iframe><script language="javascript"> alert("ss");//如果加这个语句,则结果是正确的,如果注释掉,则结果不对,很奇怪。 //判断是否网络在线,如果在线就加载网络地址;如果不在线就加载本地页面。
if (isonline=="online")
{
document.all.ifr_top_ad.src="http://www.baidu.com";
}
else
{
document.all.ifr_top_ad.src="ad/top_ad.htm";
}
</script>

解决方案 »

  1.   

    应该是图像还没加载完毕的时候已经进行判断isonlne的代码了
    可以将最后判断的代码直接写在 img的onload和onerror中,相当于异步回调。
      

  2.   


    <!--利用img的加载,判断是否在线--> 
    <img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif"  onload="document.all.ifr_top_ad.src='http://www.baidu.com';" onerror="document.all.ifr_top_ad.src='ad/top_ad.htm';" />
    <iframe name="ifr_top_ad" src="" name="top_ad" marginwidth="0" marginheight="0" align="middle" scrolling="no" frameborder="0" width="100%" height="90px"></iframe> 
      

  3.   

         运行这个代码时,IE6提示“限制此文件的显示”,只有选择“允许阻止的内容”,才能执行,不知这个与哪个语句有关,怎么避免? 
    对于这个问题,这个是浏览器的安全设置,和语句无关的,在浏览器的intel选项下设置下就行
      

  4.   

    用attachEvent /addEventListener 绑定img对象的onerror事件 
      

  5.   

    <img src="http://i1.sinaimg.cn/home/deco/2009/0330/logo_home.gif"  
    onload="document.all.ifr_top_ad.src="http://www.baidu.com"; " 
    nerror="document.all.ifr_top_ad.src="ad/top_ad.htm";" 
    />
    不要中间变量了
      

  6.   

    hookee  大侠的方案应该可行