Javascript 谷歌标签管理器延迟window.load?

Javascript 谷歌标签管理器延迟window.load?,javascript,jquery,ajax,google-tag-manager,Javascript,Jquery,Ajax,Google Tag Manager,我有一个页面在加载时触发ajax调用 $(window).load(function() { updateDeliverySlots(); }); 我的正文顶部也有Google Tag Manager javascript(我知道目前的建议是将其放在标题部分,但我们还没有更新代码,也不认为这是问题的根源) (函数(w,d,s,l,i){w[l]=w[l]| |[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});

我有一个页面在加载时触发ajax调用

$(window).load(function() {
  updateDeliverySlots();
});
我的正文顶部也有Google Tag Manager javascript(我知道目前的建议是将其放在标题部分,但我们还没有更新代码,也不认为这是问题的根源)


(函数(w,d,s,l,i){w[l]=w[l]| |[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName[0],j=d.createElement,dl=l!=“数据层”?“&l=”+l:”;
j、 异步=真;
j、 src='//www.googletagmanager.com/gtm.jsid='+i+dl;f.parentNode.insertBefore(j,f);
})
(窗口、文档、“脚本”、“数据层”、“XXXX”);
....
我对GTM标记中包含的脚本进行的一个调用有问题。此脚本向第三方发送请求。如果请求由于任何原因(例如服务器关闭)无法连接,则在请求超时(60秒)之前,不会启动updateDeliverySlots()函数(以及其中的ajax调用)。我还发现页面仍在“加载”(根据浏览器图标)


在我的GTM实现中是否有我做错的地方?我的理解是,在谷歌标签背面激发的所有内容都应该是异步的,不会影响页面的“就绪状态”。

同步脚本必须在处理到达它们时获取并运行,可以在处理到达它们后的任何时间运行

根据服务器/页面控制之外的时间,异步脚本可以:

  • 在文档完成之前添加同步资源,时间会延迟加载事件
  • 在处理页面后添加同步资源,并且不影响加载事件
  • 添加不应对页面产生重大影响的异步资源(除非它反过来向页面添加同步资源)
您可以在GTM中选择几个选项之一来解决此问题:

  • 修复自定义脚本以使用异步资源
  • 将触发触发器更改为
    页面视图->窗口加载
  • 将脚本替换为google提供的标记(如果可用),因为它们应该构造为仅使用异步资源
  • 阻止GTM中的自定义脚本(这也将阻止相关跟踪)

  • 将GTM代码段上的async更改为

  • 即:

    
    (函数(w,d,s,l,i){w[l]=w[l]||【】;w[l]。推送({'gtm.start':
    new Date().getTime(),事件:'gtm.js'});var f=d.getElementsByTagName[0],
    j=d.createElement,dl=l!=“数据层”?“&l=”+l:“”;j.defer=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(窗口、文档、“脚本”、“数据层”、“GTM-XXXXX”);
    

    由于这会将整个GTM过程移动到完全解析页面之后,因此会破坏“Google Optimizer”标记和早期页面跟踪。

    我也遇到了同样的问题,GTM确实在延迟其他脚本的执行。使用jquery$(窗口)加载的一个小更改。加载解决了以下问题:

    <script>function loadgtm(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    };$(window).load(function(){loadgtm(window,document,'script','dataLayer','GTMID');});</script>
    
    函数loadgtm(w,d,s,l,i){w[l]=w[l]| |[];w[l]。推送({'gtm.start':
    new Date().getTime(),事件:'gtm.js'});var f=d.getElementsByTagName[0],
    j=d.createElement,dl=l!=“数据层”?“&l=”+l:“”;j.async=true;j.src=
    '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    };$load(函数(){loadgtm(窗口,文档,'script','dataLayer','GTMID');});
    
    无法读取有关上的延迟选项的信息
      <!-- Google Tag Manager -->
      <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.src=
      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
      })(window,document,'script','dataLayer','GTM-XXXXX');</script>
      <!-- End Google Tag Manager -->
    
    <script>function loadgtm(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    };$(window).load(function(){loadgtm(window,document,'script','dataLayer','GTMID');});</script>