onload js函数不执行的原因分析及解决方法

  • 今天打开网站的时候,发现很多页面的信息都没有显示出来,仔细观察了之后,发现都是onload的js函数没有执行的原因。其实之前曾发现过这个情况,我以为是网站出了问题,然后采用多种方法试图让onload的js能够执行,又是重新生成网页、又是重启站点、重启IIS,甚至重启服务器都干过,我的想法是可能网页速度太慢了而导致没有执行onload的js函数。

    onload js函数不执行的原因分析及解决方法

    今天又出现此问题之后,我不再盲目的操作了。我发现最近Google的统计代码加载很慢,经常在浏览器状态栏里看到Google的统计代码链接在运行,而就在这个过程,导致网页被k住了。我细心观察了下,不但是Google的分析程序,还有Google AdSense的链接、百度联盟的链接等第三方js代码都时不时出现这个问题,就是被k住了不能加载联盟广告,继而网页也不能继续加载其他的东西,包括onload的js函数的执行。

    点击上图放大

    受这个启示,我首先把Google的统计分析代码去掉,然后打开网页,看看是否可以执行onload的js函数;如果不行,再把AdSense的联盟广告代码去掉,然后测试显示效果;如果还不行,就再把百度联盟广告的代码去掉,看是否解决问题。一般情况下,经过这三个步骤,onload的js函数不能执行的问题就可以解决了。

    实际上,在遇到这个问题是,我们只需注意一下状态栏里哪个地址的执行最久,哪个地址就是祸根了,把它去掉即可。如果是站内图片,则需要优化一下了,找出其加载慢的原因从而解决问题。

    onload的js函数是在网页加载完毕后才执行

    我一直不是很清楚,我以为onload的js函数是在网页打开的时候就执行了的,实际上,onload的js函数是在网页加载完毕后才执行,即它是网页最后才执行的函数。

    了解了这个之后,我们就能理解为什么有时候onload的js函数没有执行了,原因很简单,因为网页有个别地方没有加载完,被k住哪里了。

    JQuery的$(window).load()与OnLoad事件比较

    JQuery的$(window).load()方法与OnLoad事件,很大的区别就是执行的顺序不同。

    对于Body.Onload事件,是在加载完所有页面内容才会触发,我的意思是所有内容,包括图片,flash等.如果页面的这些内容很多会让用户等待很长时间。

    而对于$(document).ready()方法,这个方法只是在页面所有的DOM加载完毕后就会触发,无疑很大的加快了网页的速度。

    但是对于一些特殊应用,比如图片的放大缩小,图片的剪裁。需要网页所有的内容加载完毕后才执行的呢?我推荐使用$(window).load()方法,这个方法会等到页面所有内容加载完毕后才会触发,并且同时又没有OnLoad事件的弊端。

      <script type="text/javascript">
            $(window).load(function() {
                alert("hello");
            });
            $(window).load(function() {
                alert("hello again");
            });
        </script>

    上面的代码会在页面所有内容加载完成后按先后顺序依次执行。

    当然不要忘了与之对应的Unload方法:

    $(window).unload(function() {
                alert("good bye");
            });

    上面代码会在页面关闭时引发。

    在所有DOM加载之前引发JS代码,这个方法是我在调试的时候最喜欢的,有时候开发的时候也用这种方法。

    <body>
        <script type="text/javascript">
            (function() {
                alert("hi");
            })(jQuery)
        </script>
    </body>

    对,就是利用js闭包的形式将js代码嵌入body,这段代码会自动执行,当然也可以直接嵌入js代码,这种方式要注意顺序问题,如下:

    <body>
    <div id="test">this is the content</div>
        <script type="text/javascript">
            alert($("#test").html());//I Can display the content
        </script>
    </body>
    <body>
       <script type="text/javascript">
           alert($("#test").html());//I Can't display the content
        </script>
        <div id="test">this is the content</div>
    </body>

    上面两段代码,第二段代码当中因为只能解释到当前代码之前的DOM,而test并不存在于已经解析的DOM数,所以第二段代码无法正确显示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值