首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自tagmanager的Javascripts

来自tagmanager的Javascripts
EN

Stack Overflow用户
提问于 2016-06-03 23:32:28
回答 1查看 77关注 0票数 2

我想确定是通过显式地从页面调用还是通过标记管理器来加载Javascripts。

以下代码可用于列出页面正在运行的Javascripts

代码语言:javascript
复制
$("script[src]").each(function( i, src ) 
{  
       console.info($(this).attr('src'));  
});

以下脚本是标记管理器的示例:

代码语言:javascript
复制
www.googletagmanager.com/gtm.js?id=GTM-TM2FVV7
d3c3cq33003psk.cloudfront.net/opentag-136914-2122355.js

我如何确定哪些脚本是由标记管理器服务带来的,哪些是在页面中显式调用的?

我考虑手动浏览HTML源代码,并注意哪些脚本被显式调用。然而,问题是我如何知道哪个标记管理器调用了哪个脚本。

EN

回答 1

Stack Overflow用户

发布于 2019-01-27 08:41:06

您可以使用MutationObserver“监听”DOM树中发生的更改。在本例中,您感兴趣的是添加到页面中的<script>节点。

这是一个概念的证明:

  1. 初始页面包含<script src="http://example.com/internal.js"></script>,因此不应将其视为外部脚本。
  2. dropScript函数模拟您的标记管理器:它将在您的页面上放置一个外部<script>,我们将对其进行跟踪。
  3. 每次DOM发生更改时,都会执行观察者回调。在本例中,我只对添加<script>元素感兴趣。
  4. 在1之后,我将到目前为止检测到的所有外部脚本转储到控制台。

代码语言:javascript
复制
const dropScript = (src) => {
  setTimeout(() => {
    document.body.appendChild(
      document.createElement('script'))
        .src = src;
    console.log(`dropped ${src} on the page`);
  }, 500);
};

const externalScript = [];

const observer = new MutationObserver((mutations) => {
  for (let mutation of mutations) {
    mutation.addedNodes.forEach((node) => {
      if (node.nodeName.toLowerCase() === 'script') {
        externalScript.push(
          node.getAttribute('src'));
      }
    });
  }
});

observer.observe(document.body, { childList: true });

dropScript('http://example.com/external_1.js');
dropScript('http://example.com/external_2.js');
dropScript('http://example.com/external_3.js');

setTimeout(() => {
  console.log(externalScript);
}, 1000);
代码语言:javascript
复制
<script src="http://example.com/internal.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37618326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档