1

我正在尝试运行内容实验,因此 <head> 的基本结构应如下所示:

<head>
    <!-- Content experiments code (CE) -->
        ***
    <!-- End CE code -->

    *** Standard <head> code: title, meta, CSS, JS, etc. ***

    <!-- Google Analytics code -->
        ***
    <!-- End GA code -->
</head>

但是,问题来了:

正在加载的各种 JS 中有Google Tag Manager

<script async="" src="//www.googletagmanager.com/gtm.js?id=GTM-***"></script>

此文件动态加载另一个脚本:

<script type="text/javascript" async="" src="//www.googleadservices.com/pagead/conversion_async.js"></script>

对我来说不幸的是,它通过使用以下方法在第一个 <script> 标记之前插入它来做到这一点:

...
getElementsByTagName('script')[0].insertBefore(newScriptObject);
...

如果不清楚为什么这是一个问题,内容实验脚本应该是 <head> 中的第一个元素。但是,因为这个脚本是在第一个脚本元素之前插入的,所以它不是。

更复杂的是,其他脚本(也在我的控制之外)也通过此方法加载。因此,即使在文档中内容实验代码是第一位的,但在 JS 执行并更新 DOM 之后,它之前放置了许多脚本元素。

那么,有关系吗?

我是否认为这实际上并不重要?与页面加载一样,第一个脚本元素将是加载内容实验脚本的元素(这是正确的),因为尚未动态插入其他文件。

是否会在加载其余脚本之前加载并运行 CE 脚本?

为提出一个非常直截了当的问题而略显冗长的方式道歉,但是,是的。

谢谢您的帮助,

汤姆

4

1 回答 1

1

这是网络上的标准做法,完全没问题。很好的挖掘和调试!内容实验只是希望您将脚本加载到靠近头顶的位置,以便他们可以将人们从控制 url 重定向到尽可能少的性能影响。

编辑:并且当人们在谷歌分析之后意外包含 CE 时,他们不会得到很多支持票。

于 2014-02-20T04:46:19.887 回答