我正在尝试运行内容实验,因此 <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 脚本?
为提出一个非常直截了当的问题而略显冗长的方式道歉,但是,是的。
谢谢您的帮助,
汤姆