Artem Bulatov
Artem Bulatov

Reputation: 133

How does JS code execution can be blocked by client?

I've got some JS code that runs eventually - I've got no idea whats's wrong. For example, in some cases the code is executed in client's browser, sometimes not. We have a server indicating if a client reached the server from browser. 2/15 of clients don't get the job done.

Here's the code example.

__zScriptInstalled = false;
function __zMainFunction(w,d){

var expire_time = 24*60*60;
var __zLink = 'https://tracker.com/track/4c72663c8c?';
__zLink += '&visitor_uuid=7815528f-5631-4c10-a8e4-5c0ade253e3b';
var __zWebsitehash = '4c72663c8c';
var click_padding = 2;
var clicks_limit = 1;


var __zSelector = "*";


function __zGetCookie(name, default_value=undefined) {
    name += '_' + __zWebsitehash;
    var matches = document.cookie.match(new RegExp(
      "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ))
    return matches ? decodeURIComponent(matches[1]) : default_value
}

function __zSetCookie(name, value, props) {
    name += '_' + __zWebsitehash;
    props = props || {}
    var exp = props.expires

    if (typeof exp == "number" && exp) {
        var d = new Date()
        d.setTime(d.getTime() + exp*1000)
        exp = props.expires = d
    }

    if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }
    value = encodeURIComponent(value)
    var updatedCookie = name + "=" + value

    for(var propName in props){
        updatedCookie += "; " + propName
        var propValue = props[propName]
        if(propValue !== true){ updatedCookie += "=" + propValue }
    }
    document.cookie = updatedCookie
}

function __zDeleteCookie(name) {
    name += '_' + __zWebsitehash;
    __zSetCookie(name, null, { expires: -1 })

}

function clear_trigger(selector) {
    __zSetCookie('_source_clickunder', true, { expires: expire_time });
    if (selector) {
        document.querySelectorAll(selector).removeAttribute('onclick');
    }
}


function __zGetCORS(url, success) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onload = success;
    xhr.send();
    return xhr;
}


var __zMainHandler = function(e=undefined, override=false) {
    if (__zScriptInstalled && !override){
        console.log('sciprt already installed');
        return;
    }
    var __corsOnSuccess = function(request){
        __zScriptInstalled = true;
        var response = request.currentTarget.response || request.target.responseText;
        var parsed = JSON.parse(response);
        if (! parsed.hasOwnProperty('_link')){
            return;
        }
        if (parsed.hasOwnProperty('success')){
            if (parsed.success != true)
            return;
        }
        else{
            return;
        }

        var today = __zGetCookie('_source_today', 0);
        var now = new Date();
        if (today == 0){
            today = now.getDate();
            __zSetCookie('_source_today', today);
        }
        else if (today != now.getDate()){
            today = now.getDate();
            __zSetCookie('_source_today', today);
            __zSetCookie('_source_click_count' , 0);
        }



            var eventHandler = function(e) {
                var current_click = parseInt(__zGetCookie('_source_click_count', 0));
                __zSetCookie('_source_click_count', current_click + 1);
                if (clicks_limit * click_padding > current_click){
                    if (current_click % click_padding == 0) {
                        e.stopPropagation();
                        e.preventDefault();

                        let queue = parseInt(__zGetCookie('_source_today_queue', 0))
                        __zSetCookie('_source_today_queue', queue + 1);
                        window.open(__zLink+'&queue=' + queue, '_blank');
                        window.focus();
                    }
                }
                return true;
            };
            function DOMEventInstaller(e=undefined){

                var elementsList = document.querySelectorAll(__zSelector);
                for (var i = 0; i != elementsList.length; i++){
                    elem = elementsList.item(i);
                    elem.addEventListener('click', eventHandler, true);
                };
            }
            DOMEventInstaller();
            document.body.addEventListener('DOMNodeInserted', function(e){
                DOMEventInstaller(e.target);
                e.target.addEventListener('click', eventHandler, true);
            });




    }


    var interval = setInterval(
        function(){
            if (__zScriptInstalled){
                clearInterval(interval);
            }
            __zGetCORS(__zLink+'&response_type=json', __corsOnSuccess);
        }, 
        1500
    );


    console.log('script installed');
};

__zMainHandler();
document.addEventListener('DOMContentLoaded', function(e){__zMainHandler(e);});
};
__zMainFunction(window, document);

Maybe there're kinds o extensions that block the script execution.

Upvotes: 0

Views: 99

Answers (1)

nits
nits

Reputation: 115

Almost all modern browsers have options to disable js . e.g. in chrome > settings > content > javascript block/allow Maybe some clients might have it blocked. But by default its allowed by browsers.

Also most browsers have do not track option.

Hope it helps.

Upvotes: 2

Related Questions