客户端如何阻止JS代码执行?

时间:2018-11-24 11:09:38

标签: javascript

我有一些最终会运行的JS代码-我不知道怎么了。 例如,在某些情况下,有时在客户端的浏览器中执行代码。我们有一个服务器,指示客户端是否通过浏览器到达服务器。 2/15的客户无法完成工作。

这是代码示例。

__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);

也许有些扩展名会阻止脚本执行。

1 个答案:

答案 0 :(得分:2)

几乎所有现代浏览器都有禁用js的选项。 例如在 chrome>设置>内容> javascript阻止/允许中 也许某些客户可能阻止了它。 但默认情况下,浏览器允许。

大多数浏览器还具有不跟踪选项

希望有帮助。

相关问题