如何判断阻止广告拦截器(如ghostery)的脚本是否阻止加载文件

时间:2015-01-09 00:56:37

标签: javascript ajax double-click

我正在尝试开发一种方法来判断ghostery是否阻止谷歌双击广告脚本加载。我不想使用监听器,我想能够判断该脚本或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 个答案:

答案 0 :(得分:0)

看起来这种方法实际上是目前唯一没有使用间隔或超时的方法,

<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.
}

答案 1 :(得分:0)

使用函数测试尝试超时,以检查脚本设置的全局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在外部加载脚本,但您可以测试它是否已设置全局变量。如果它在超时结束时没有,那么您可以假设它无法加载。请注意,这绝不是一个完美的解决方案,更长的超时会更安全,但仍然不理想。