【问题标题】:load javascript after loading the page加载页面后加载 javascript
【发布时间】:2011-12-07 19:44:59
【问题描述】:

我已经阅读了很多主题并尝试了很多东西,但我无法得到我想要的东西。 我刚刚将我的 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 我有我的 google 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文件中了。 无论如何感谢您的帮助。

【问题讨论】:

  • 你得到什么错误?
  • 错误:adsense 未定义
  • 这样做 -- window.load = function() { adsense(); };
  • @greengit 好多了,现在错误消失了但是页面上没有显示添加
  • 从 adsense() 函数中删除 &lt;!-- 和 //--&gt; 也

标签: javascript load deferred


【解决方案1】:

window.onload 需要一个函数回调;但是,您正在使用adsense() 执行adsense,而adsense 不返回函数;因此,window.onload 将丢弃它。改为:

    window.onload = adsense;

更新

上面的答案应该被丢弃,但我把它留下来让人们知道window.onload 需要一个函数回调:)

请记住,脚本元素上的defer 将指示浏览器等待页面加载完成后再执行脚本;但是,您的 fonctions.js 在您最后一个 script 标记的 src 属性中;因此,您的延迟脚本很可能会在定义 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>

【讨论】:

  • 感谢您的帮助,但这仍然不起作用。如果我发出警报(“ok”);就在 adsense() 之后;它已显示,但广告仍未显示。但是,如果我在该脚本之前插入我的 fonctions.js,则会显示广告...
  • 您能否在您的环境中显示有问题的实际代码?当我说实际代码时,我的意思是当您遇到问题时,您更新的 html 部分实际上存在的代码。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-05-26
    • 2014-03-21
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多