Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要修改此onlinejs代码(internet检测脚本)以手动启动,而不是在计时器上启动_Javascript - Fatal编程技术网

Javascript 需要修改此onlinejs代码(internet检测脚本)以手动启动,而不是在计时器上启动

Javascript 需要修改此onlinejs代码(internet检测脚本)以手动启动,而不是在计时器上启动,javascript,Javascript,我正在使用优秀的onlinejs()库来检查我的应用程序是否具有实时互联网连接。但是,我不需要定期启动它,而是需要手动调用主函数 我想修改这段代码,这样它就不会在计时器上触发,并且知道调用手动触发的函数的名称,假设它只是getterSetter 我之前修改下面代码的尝试破坏了脚本,因为我不是JavaScript专家。我非常感谢在修改这段非常有用的代码时得到的任何帮助 function getterSetter(variableParent, variableName, getterFun

我正在使用优秀的onlinejs()库来检查我的应用程序是否具有实时互联网连接。但是,我不需要定期启动它,而是需要手动调用主函数

我想修改这段代码,这样它就不会在计时器上触发,并且知道调用手动触发的函数的名称,假设它只是getterSetter

我之前修改下面代码的尝试破坏了脚本,因为我不是JavaScript专家。我非常感谢在修改这段非常有用的代码时得到的任何帮助

    function getterSetter(variableParent, variableName, getterFunction, setterFunction) {
    if (Object.defineProperty) {
        Object.defineProperty(variableParent, variableName, {
            get: getterFunction,
            set: setterFunction
        });
    }
    else if (document.__defineGetter__) {
        variableParent.__defineGetter__(variableName, getterFunction);
        variableParent.__defineSetter__(variableName, setterFunction);
    }
}

(function (w) {
    w.onlinejs = w.onlinejs || {};

    //Checks interval can be changed in runtime
    w.onLineCheckTimeout = 5000;

    //Use window.onLineURL incapsulated variable
    w.onlinejs._onLineURL = "http://lascelles.us/wavestream/online.php";

    w.onlinejs.setOnLineURL = function (newURL) {
        w.onlinejs._onLineURL = newURL;
        w.onlinejs.getStatusFromNavigatorOnLine();
    }

    w.onlinejs.getOnLineURL = function () {
        return w.onlinejs._onLineURL;
    }

    getterSetter(w, 'onLineURL', w.onlinejs.getOnLineURL, w.onlinejs.setOnLineURL);


    //Verification logic
    w.onlinejs.setStatus = function (newStatus) {
        w.onlinejs.fireHandlerDependOnStatus(newStatus);
        w.onLine = newStatus;
    }

    w.onlinejs.fireHandlerDependOnStatus = function (newStatus) {
        if (newStatus === true && w.onLineHandler !== undefined && (w.onLine !== true || w.onlinejs.handlerFired === false)) {
            w.onLineHandler();
        }
        if (newStatus === false && w.offLineHandler !== undefined && (w.onLine !== false || w.onlinejs.handlerFired === false)) {
            w.offLineHandler();
        }
        w.onlinejs.handlerFired = true;
    };

    w.onlinejs.startCheck = function () {
        setInterval("window.onlinejs.logic.checkConnectionWithRequest(true)", w.onLineCheckTimeout);
    }

    w.onlinejs.stopCheck = function () {
        clearInterval("window.onlinejs.logic.checkConnectionWithRequest(true)", w.onLineCheckTimeout);
    }

    w.checkOnLine = function () {
        w.onlinejs.logic.checkConnectionWithRequest(false);
    }

    w.onlinejs.getOnLineCheckURL = function () {
        return w.onlinejs._onLineURL + '?' + Date.now();
    }

    w.onlinejs.getStatusFromNavigatorOnLine = function () {
        if (w.navigator.onLine !== undefined) {
            w.onlinejs.setStatus(w.navigator.onLine);
        } else {
            w.onlinejs.setStatus(true);
        }
    }

    //Network transport layer
    var xmlhttp = new XMLHttpRequest();

    w.onlinejs.isXMLHttp = function () {
        return "withCredentials" in xmlhttp;
    }

    w.onlinejs.isXDomain = function () {
        return typeof XDomainRequest != "undefined";
    }

    //For IE we use XDomainRequest and sometimes it uses a bit different logic, so adding decorator for this
    w.onlinejs.XDomainLogic = {
        init: function () {
            xmlhttp = new XDomainRequest();
            xmlhttp.onerror = function () {
                xmlhttp.status = 404;
                w.onlinejs.processXmlhttpStatus();
            }
            xmlhttp.ontimeout = function () {
                xmlhttp.status = 404;
                w.onlinejs.processXmlhttpStatus();
            }
        },
        onInternetAsyncStatus: function () {
            try {
                xmlhttp.status = 200;
                w.onlinejs.processXmlhttpStatus();
            } catch (err) {
                w.onlinejs.setStatus(false);
            }
        },
        checkConnectionWithRequest: function (async) {
            xmlhttp.onload = w.onlinejs.logic.onInternetAsyncStatus;

            var url = w.onlinejs.getOnLineCheckURL();

            xmlhttp.open("GET", url);
            w.onlinejs.tryToSend(xmlhttp);
        }
    }

    //Another case for decoration is XMLHttpRequest
    w.onlinejs.XMLHttpLogic = {
        init: function () {

        },
        onInternetAsyncStatus: function () {
            if (xmlhttp.readyState === 4) {
                try {
                    w.onlinejs.processXmlhttpStatus();
                } catch (err) {
                    w.onlinejs.setStatus(false);
                }
            }
        },
        checkConnectionWithRequest: function (async) {
            if (async) {
                xmlhttp.onreadystatechange = w.onlinejs.logic.onInternetAsyncStatus;
            } else {
                xmlhttp.onreadystatechange = undefined;
            }

            var url = w.onlinejs.getOnLineCheckURL();
            xmlhttp.open("HEAD", url, async);
            w.onlinejs.tryToSend(xmlhttp);

            if (async === false) {
                w.onlinejs.processXmlhttpStatus();
                return w.onLine;
            }
        }
    }

    if (w.onlinejs.isXDomain()) {
        w.onlinejs.logic = w.onlinejs.XDomainLogic;
    } else {
        w.onlinejs.logic = w.onlinejs.XMLHttpLogic;
    }

    w.onlinejs.processXmlhttpStatus = function () {
        var tempOnLine = w.onlinejs.verifyStatus(xmlhttp.status);
        w.onlinejs.setStatus(tempOnLine);
    }

    w.onlinejs.verifyStatus = function (status) {
        return status === 200;
    }

    w.onlinejs.tryToSend = function (xmlhttprequest) {
        try {
            xmlhttprequest.send();
        } catch(e) {
            w.onlinejs.setStatus(false);
        }
    }

    //Events handling
    w.onlinejs.addEvent = function (obj, type, callback) {
        if (window.attachEvent) {
            obj.attachEvent('on' + type, callback);
        } else {
            obj.addEventListener(type, callback);
        }
    }

    w.onlinejs.addEvent(w, 'load', function () {
        w.onlinejs.fireHandlerDependOnStatus(w.onLine);
    });

    w.onlinejs.addEvent(w, 'online', function () {
        window.onlinejs.logic.checkConnectionWithRequest(true);
    })

    w.onlinejs.addEvent(w, 'offline', function () {
        window.onlinejs.logic.checkConnectionWithRequest(true);
    })

    w.onlinejs.getStatusFromNavigatorOnLine();
    w.onlinejs.logic.init();
    w.checkOnLine();
    w.onlinejs.startCheck();
    w.onlinejs.handlerFired = false;
    })(window);

查看源代码,我相信您只需调用
onlinejs.logic.checkConnectionWithRequest(false)
即可同步获取状态。此函数将返回
true
false

PS:我确信有更好的库来完成这个任务,我真的不喜欢它的编写方式,很明显,作者对JS不是很了解。例如,从库中获取的以下代码毫无意义

w.onlinejs.stopCheck = function () {
        clearInterval("window.onlinejs.logic.checkConnectionWithRequest(true)", w.onLineCheckTimeout);
}

一个简单的编辑是
w.onlinejs.startCheck
函数,只需在其中添加一个bool,即可启动“计时器”或
setInterval
w.onlinejs.startCheck=function(){setInterval(“window.onlinejs.logic.checkConnectionWithRequest(true)”,w.onLineCheckTimeout)..我将如何像您所描述的那样向其添加布尔值?}我将尝试此方法。谢谢