Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2017, 04:13
Аватар для s.cool.men
Новичок на форуме
Отправить личное сообщение для s.cool.men Посмотреть профиль Найти все сообщения от s.cool.men
 
Регистрация: 29.02.2012
Сообщений: 5

Как вытащить переменную из функции?
Javascript слабо понимаю ..
Есть функция
ExoDetector.detectCensorship(function(adBlockIsOn){
alert(adBlockIsOn); // return true or false
});

Так можно делать условия, но только внутри этой функции. Как достать или переназначить значение adBlockIsOn для использования за пределами этой конструкции?
Типа
ExoDetector.detectCensorship(function(adBlockIsOn){
new_var = adBlockIsOn;
});

if(new_var) {...} else {...}

Последний раз редактировалось s.cool.men, 05.11.2017 в 04:15.
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2017, 08:12
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

if(window.new_var) {...} else {...}
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2017, 10:47
Аватар для s.cool.men
Новичок на форуме
Отправить личное сообщение для s.cool.men Посмотреть профиль Найти все сообщения от s.cool.men
 
Регистрация: 29.02.2012
Сообщений: 5

ExoDetector.detectCensorship(function(adBlockIsOn){
new_var = adBlockIsOn;
});

alert(window.new_var); // return undefined


Возвращает undefined вместо true,false

Код функции
var ExoDetector = {
    domain_base: "exosrv.com",
    detectCensorship: function(onComplete)
    {
        var testDomEl = document.createElement('iframe'),
            randomNum = Math.floor(Math.random() * (10000 - 123 + 1)) + 123,
            protocol = window.location.protocol,
            id = 'adsbox_ex_' + randomNum,
            block = false;

        testDomEl.setAttribute('height', "1px");
        testDomEl.setAttribute('width', "1px");
        testDomEl.setAttribute('id', id);
        testDomEl.setAttribute('class', 'adsBox pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links');
        testDomEl.setAttribute('style', "width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important; box-sizing: content-box !important; border-width: 0px !important;");

        var testScript = document.createElement('script');
        testScript.src = protocol + "//ads." + ExoDetector.domain_base + "/ads.js";
        testScript.onerror = function() {
            block = true;
        };

        document.body.appendChild(testDomEl);
        document.head.appendChild(testScript);

        var done = function () {
            if (typeof onComplete == 'function') {
                onComplete(block);
            }
            document.body.removeChild(testDomEl);
        };

        var domDetect = function () {
            try {
                var someAd = document.getElementById(id);
                if (someAd === null
                    || someAd.style.display == "none"
                    || someAd.style.display == "hidden"
                    || someAd.style.visibility == "hidden"
                    || someAd.offsetParent === null
                    || someAd.offsetHeight == 0
                    || someAd.offsetLeft == 0
                    || someAd.offsetTop == 0
                    || someAd.offsetWidth == 0
                    || someAd.clientHeight == 0
                    || someAd.clientWidth == 0
                ) {
                    block = true;
                }
                if (window.getComputedStyle !== undefined) {
                    var style = window.getComputedStyle(someAd, null);
                    if(style && (style.getPropertyValue('display') == 'none' || style.getPropertyValue('visibility') == 'hidden')) {
                        block = true;
                    }
                }
            } catch (err) {
            }
        };

        setTimeout(domDetect, 500);
        setTimeout(done, 550);
    }
};

Последний раз редактировалось s.cool.men, 05.11.2017 в 10:53.
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2017, 11:13
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

s.cool.men, только так
ExoDetector.detectCensorship(function(adBlockIsOn){
  var new_var = adBlockIsOn;
  foo(new_var);
});

function foo(new_var) {
  if(new_var) {...} else {...}
}
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2017, 13:54
Аватар для s.cool.men
Новичок на форуме
Отправить личное сообщение для s.cool.men Посмотреть профиль Найти все сообщения от s.cool.men
 
Регистрация: 29.02.2012
Сообщений: 5

Мне нужна глобальная переменная с результатом этой функции...
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2017, 14:48
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от s.cool.men
Мне нужна глобальная переменная с результатом этой функции...
Можно и глобальную объявить. Только в инструкции ниже, условие будет выполняться раньше, чем переменная в анонимной функции обратного вызова примет нужный результат.

Это фундаментальные основы асинхронного программирования яваскрипт. Лучше подтянуть теорию - это очень важный момент. А потом переходить к практике.
ExoDetector.detectCensorship(function(adBlockIsOn){
new_var = adBlockIsOn;
});

if(new_var) {...} else {...}
Ответить с цитированием
  #7 (permalink)  
Старый 06.11.2017, 20:47
Аватар для s.cool.men
Новичок на форуме
Отправить личное сообщение для s.cool.men Посмотреть профиль Найти все сообщения от s.cool.men
 
Регистрация: 29.02.2012
Сообщений: 5

Спасибо, буду разбираться.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать переменную с jquery в php Максим2 jQuery 14 28.07.2013 11:38
Как вывести переменную из javascript в html код? red-nicolas Элементы интерфейса 3 25.02.2012 13:27
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
Как передать элемент в переменную из функции kichSman jQuery 3 12.07.2011 22:16
Как передать переменную в handleServerResponse Motoko AJAX и COMET 2 17.07.2009 11:04