Что это за скрипт на большинстве страниц, на которые я перехожу?

Этот код я часто вижу на случайных страницах.

Я думаю, что это код отслеживания Google, но кто-то может подтвердить?

Когда я запускаю его в JSFiddle, кажется, ничего не происходит.

var tvt = tvt || {};
tvt.captureVariables = function(a) {
  for (var b = new Date, c = {}, d = Object.keys(a || {}), e = 0, f; f = d[e]; e++)
    if (a.hasOwnProperty(f) &&
      "undefined" != typeof a[f]) try {
      var g = [];
      c[f] = JSON.stringify(a[f], function(a, b) {
        try {
          if ("function" !== typeof b) {
            if ("object" === typeof b && null !== b) {
              if (b instanceof HTMLElement || b instanceof Node || -1 != g.indexOf(b)) return;
              g.push(b)
            }
            return b
          }
        } catch (c) {}
      })
    } catch (l) {}
    a = document.createEvent("CustomEvent");
  a.initCustomEvent("TvtRetrievedVariablesEvent", !0, !0, {
    variables: c,
    date: b
  });
  window.dispatchEvent(a)
};
window.setTimeout(function() {
  tvt.captureVariables({
    'dataLayer': window['dataLayer']
  })
}, 2000);

2 ответа

Решение

Это скрипт, добавленный расширением Tag Assistant от Google. Источник намного крупнее.

Я унифицировал исходный код, и его можно найти здесь, в Gist. Имейте в виду, это ~6300 строк - около двадцати тысяч символов слишком долго для этого ответа.

Инъекция происходит около строки 3030 с динамически созданным сценарием. Заметка kg и как они полагаются на Function.prototype.toString получить исходный код функции.

lg = function(a) {
  if (!a.Ab && (a.Ab = !0, a = a.X(), a = Object.keys(a).map(function(a) {
    return "'" + a + "': window['" + a + "']"
  }), 0 < a.length && (!aa.tvt || !aa.tvt.captureVariables))) {
    var b = document.createElement("script");
    b.textContent = "var tvt = tvt || {}; tvt.captureVariables = " + kg + ";window.setTimeout(function() {tvt.captureVariables({" + a.join(",") + "})}, 2000);";
    (document.head || document.documentElement).appendChild(b)
  }
}

kg можно найти сразу после этого, как показано ниже, что соответствует тому, что вы опубликовали.

kg = function(a) {
  for (var b = new Date, c = {}, d = Object.keys(a || {}), e = 0, f; f = d[e]; e++)
    if (a.hasOwnProperty(f) &&
      "undefined" != typeof a[f]) try {
      var g = [];
      c[f] = JSON.stringify(a[f], function(a, b) {
        try {
          if ("function" !== typeof b) {
            if ("object" === typeof b && null !== b) {
              if (b instanceof HTMLElement || b instanceof Node || -1 != g.indexOf(b)) return;
              g.push(b)
            }
            return b
          }
        } catch (c) {}
      })
    } catch (l) {}
  a = document.createEvent("CustomEvent");
  a.initCustomEvent("TvtRetrievedVariablesEvent", !0, !0, {
    variables: c,
    date: b
  });
  window.dispatchEvent(a)
};

Реклама о расширении, от About Tag Assistant.

О Tag Assistant

Tag Assistant - это расширение Chrome, которое автоматически проверяет реализацию скриптов отслеживания Google на любой странице. В настоящее время он работает для:

  • Google Analytics (ga.js)

  • Google Analytics (dc.js)

  • Отслеживание конверсий AdWords

  • Ремаркетинг AdWords (устаревший)

  • AdWords Remarketing (новый тег ремаркетинга)

  • Двойной щелчок Прожектор

  • Google Tag Manager

Как работает Tag Assistant

После установки расширения вы увидите значок, указывающий статус тега на просматриваемой странице.

  • Серый значок с символом "х" означает, что на странице не найдено ни одного кода

  • Зеленый индикатор покажет, был ли найден правильный тег. Число в значке указывает количество найденных тегов

  • Синий индикатор покажет, что есть предложения по улучшению общего состояния тегирования.

  • Желтый индикатор покажет, что тег был найден с незначительными проблемами при реализации.

  • Красный индикатор покажет, что тег был найден с критическими проблемами при реализации.

Нажмите на иконку, чтобы открыть окно с информацией о тегах. Он показывает, сколько тегов было найдено, сколько ошибок было найдено, какие-либо ошибки, а также ссылку на наиболее релевантный справочный документ, доступный для решения проблемы. Кроме того, Tag Assistant вносит предложения, когда могут быть сделаны улучшения. Например, если установлен устаревший тег Analytics, помощник по тегам может предложить обновить его до нового тега.

Это просто шорткод для проверки, определена ли переменная, и если нет, определяет ее как пустой объект. Это похоже на:

if(tvt === undefined){
   tvt = {};
}

По сути, это гарантирует, что оба:

  • переменная определена (и объект)
  • он сохраняет все предыдущие свойства (если есть)

var obj1 = {prop: 123};
var obj2 = obj1 || {}; // obj2 will have the value of obj1 because obj1 is defined
var obj3 = obj3 || {}; // obj will be an empty object

document.write(JSON.stringify({obj2: obj2, obj3: obj3}));


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я ответил только на первую строку кода, потому что я понял, что вы спрашиваете из названия. Но теперь я вижу, что вы можете ссылаться на весь блок кода. Если так, просто проигнорируйте этот ответ.

Другие вопросы по тегам