我正在尝试开发一种方法来判断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');
}
}
});
答案 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在外部加载脚本,但您可以测试它是否已设置全局变量。如果它在超时结束时没有,那么您可以假设它无法加载。请注意,这绝不是一个完美的解决方案,更长的超时会更安全,但仍然不理想。