加载页面后加载JavaScript

时间:2011-12-05 18:48:32

标签: javascript load deferred

我已经阅读了很多主题并尝试了很多东西,但我无法得到我想要的东西。 我刚刚在页面末尾移动了我的js代码,现在我遇到了一些错误。

这就是我的页面的样子:

<html>
   <head>
      bla bla
   </head>
<body>
   bla bla
   <div class="advertising">
      <script type="text/javascript" defer="defer">
          window.onload = adsense();
      </script>
      <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
      </script>
   </div>

  <script language="javascript" type="text/javascript" src="fonctions.js"></script>
</body>
</html>

在fonctions.js中,我有我的谷歌adsense代码:

 function adsense(){
    <!--
    google_ad_client = "pub-xxxxx";
    /* 120x600, date de création 11/06/11 */
    google_ad_slot = "xxxxx";
    google_ad_width = 120;
    google_ad_height = 600;
    //-->
    }

我的想法是只在一个地方使用相同的adsense代码,但我无法在文件fonctions.js之后加载它

我试过defer =“defer”,window.onload ......

有什么想法吗? 感谢

我在Firebug中收到此错误: 错误:未定义adsense

PS:我想避免使用Jquery(以避免使页面太大)

更新:

<script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>
    <script language="javascript" type="text/javascript" src="fonctions.js"></script>

在fonctions.js中,如果我输入以下代码,则显示“ok”:

function adsense(){
alert ("ok");
}

但是,如果我有此代码,则不会显示广告:

function adsense(){
google_ad_client = "pub-xx";
/* 120x600, date de création 16/04/11 */
google_ad_slot = "xxx";
google_ad_width = 120;
google_ad_height = 600;
}

我的猜测是这是一个谷歌问题......代码无法以这种方式加载......? 如果我将adsense代码放在页面中(在调用下方 - 你在哪里做 alert('here'); )它会很好地显示...所以我的adsense代码是正确的

更新: 我终于改变了解决方案,我已将代码放在.html文件中,并使用php包含它。所以它不再在我的js文件中了。 无论如何,谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

window.onload期望函数回调;但是,您正在使用adsense执行adsense(),并且adsense不会返回函数;因此,window.onload会弃掉它。改为:

    window.onload = adsense;

更新

上面的答案应该被抛弃,但是我将其遗弃,以便人们可以知道window.onload期望函数回调:)

请记住,脚本元素上的defer将指示浏览器等到页面加载后执行脚本;但是,您的fonctions.js位于上一个src标记的script属性中;因此,您的延迟脚本很可能在定义adsense之前执行,因为浏览器将发出http请求以检索您的脚本。这将允许延迟脚本在未定义adsense时继续执行。尝试使用此代替原始延迟脚本:

    <script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>

更新

我忘了在IE以外的任何地方都不支持脚本延迟。因此,推迟问题不应该在这里发挥作用;但是,我在FF和Chrome中测试了以下代码,它可以工作:

    <script type="text/javascript" defer="defer">
        (function() {  // 'sandbox' javascript pattern to prevent clobbering
                       // global namespace
            var executeProxy = function() {
                if (typeof adsense === 'function') {  // adsense is configured
                    adsense();
                } else {  // adsense is not configured;
                          // therefore, try again later
                    setTimeout(executeProxy, 50);
                }
            };
            executeProxy();
        }());
    </script>
    <script type="text/javascript">
        function adsense() {
            alert('here');
        }
    </script>

答案 1 :(得分:1)

window.onload = adsense();立即调用adsense() 并将其返回值分配给onload