我正在尝试开发一种方法来判断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');
}
}
});发布于 2015-01-10 07:23:15
看起来这个方法是目前唯一不使用间隔或超时的方法,
<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.
}发布于 2015-07-30 03:19:40
使用函数测试尝试超时,以检查脚本设置的全局变量是否已加载。即:
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从外部加载脚本,但您可以测试是否设置了全局变量。如果它在超时结束时还没有加载,那么你可以假定它加载失败。请注意,虽然这绝不是一个完美的解决方案,更长的超时将是一个更安全的赌注,但仍然不是理想的。
https://stackoverflow.com/questions/27852263
复制相似问题