如何确保某个脚本标签保留在 <head> 的顶部
How to ensure a certain script tag remains at the top of <head>
我在一个大型网站上工作,上面已经设置了许多现有的第三方产品。
我想添加一个 cookie 同意脚本,它需要是第一个执行的脚本。
所以我将它添加到 <head>
的顶部,当我查看源代码时,我可以看到它就在顶部。
<head>
<script src="https://path/to/cookie/consent/stuff/cookie_script.js">
...
然后进一步加载各种其他外部库和框架:jQuery、GoogleAds、Hotjar 等
...
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" async="async" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
...
</head>
但是当页面加载完成时,当我使用 Web 开发工具检查 DOM 时,我可以看到我的 cookie 脚本不再是 <head>
中的第一个元素.前面插入了一些其他元素。
<head>
<script src="https://www.googletagservices.com/activeview/js/current/osd.js?cb=%2Fr20100101"></script>
<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>
<script src="https://securepubads.g.doubleclick.net/pagead/js/rum.js"></script>
...
// Cookie consent script has been pushed down to here
<script src="https://path/to/cookie/consent/stuff/cookie_script.js">
...
</head>
我该怎么办?
这些元素是在从您的服务器加载页面之后插入的,这意味着在加载和执行这些脚本时,您的脚本已经 运行。
您可以使用类似以下内容以编程方式检测此问题:
setTimeout(function() {
var topScript = document.querySelector("script");
if (topScript.getAttribute(src) != ...) {
//takeAction
}
}, yourTimeout);
对于您的操作,您可以使用 alert
警告用户 close/not 保存页面。或者,您可以尝试将想要位于顶部的脚本移回顶部
我在一个大型网站上工作,上面已经设置了许多现有的第三方产品。
我想添加一个 cookie 同意脚本,它需要是第一个执行的脚本。
所以我将它添加到 <head>
的顶部,当我查看源代码时,我可以看到它就在顶部。
<head>
<script src="https://path/to/cookie/consent/stuff/cookie_script.js">
...
然后进一步加载各种其他外部库和框架:jQuery、GoogleAds、Hotjar 等
...
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" async="async" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
...
</head>
但是当页面加载完成时,当我使用 Web 开发工具检查 DOM 时,我可以看到我的 cookie 脚本不再是 <head>
中的第一个元素.前面插入了一些其他元素。
<head>
<script src="https://www.googletagservices.com/activeview/js/current/osd.js?cb=%2Fr20100101"></script>
<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script>
<script src="https://securepubads.g.doubleclick.net/pagead/js/rum.js"></script>
...
// Cookie consent script has been pushed down to here
<script src="https://path/to/cookie/consent/stuff/cookie_script.js">
...
</head>
我该怎么办?
这些元素是在从您的服务器加载页面之后插入的,这意味着在加载和执行这些脚本时,您的脚本已经 运行。
您可以使用类似以下内容以编程方式检测此问题:
setTimeout(function() {
var topScript = document.querySelector("script");
if (topScript.getAttribute(src) != ...) {
//takeAction
}
}, yourTimeout);
对于您的操作,您可以使用 alert
警告用户 close/not 保存页面。或者,您可以尝试将想要位于顶部的脚本移回顶部