Как определить, блокирует ли скрипт блокировку рекламы, например 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.
}