Как определить, блокирует ли скрипт блокировку рекламы, например ghostery, загрузку файла

Я пытаюсь найти способ, чтобы определить, блокирует ли ghostery рекламные скрипты Google DoubleClick для загрузки. Я не хочу использовать слушателя, я просто хочу сказать, заблокирован ли этот скрипт или URL. Я придумал это, которое всегда выдает ошибку, но я могу различить сообщения об ошибках. Надеясь на лучшее решение, чем сломанный вызов ajax.

Я просто хочу сообщить, сколько пользователей не видят рекламу, потому что они используют блокировщик рекламных скриптов.

  $.ajax({
    url: 'http://www.googletagservices.com/tag/js/gpt.js',
    type: 'GET',
    error: function(d) {
      console.log('error', d, '/error');
      if(d.statusText != 'error') {
        console.log('ghostery enabled');
      } else {
        console.log('script is not blocked');
      }
    }
  });

2 ответа

Попробуйте тайм-аут с функциональным тестом, чтобы проверить, загружен ли глобальный var, установленный сценарием. IE;

function loadExtScript(src, test, callback) {
  var s = document.createElement('script');
  s.src = src;
  document.body.appendChild(s);

  var callbackTimer = setInterval(function() {
    var call = false;
    try {
      call = test.call();
    } catch (e) {}

    if (call) {
      clearInterval(callbackTimer);
      callback.call();
    }
  }, 100);
}

Чтобы использовать это, что-то вроде:

this.loadExternalScript('www.domain.com/script.js', function () {
    return (typeof window.myscriptobject === 'undefined');
}, onScriptFailedToLoad);

вы будете загружать скрипт извне через javascript, но вы можете проверить, был ли установлен глобальный var. Если к концу тайм-аута он не истек, вы можете предположить, что он не загрузился. Обратите внимание, что это ни в коем случае не идеальное решение, и более длительный тайм-аут был бы более безопасной ставкой, но все же не идеальным.

Похоже, этот метод действительно единственный, без использования интервалов или тайм-аутов,

<script src="http://www.googletagservices.com/tag/js/gpt.js" onload="callback()" onerror="error()"></script>

function callback() {
  // in this case you will need to verify the gpt object isn't blank for some ad blockers in chrome
}

function error() {
  // most script blocking ad blockers will end up here.  All script blocking ad blockers (ghostery, disconnect) I have seen in firefox end up here.
}
Другие вопросы по тегам