{"version":3,"sources":["jsdelivr-header.js","/npm/wpsjs-rpc-sdk-new@1.1.0/wpsjsrpcsdk.js"],"names":[],"mappings":"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","file":"/npm/wpsjs-rpc-sdk-new@1.1.0/wpsjsrpcsdk.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/wpsjs-rpc-sdk-new@1.1.0/wpsjsrpcsdk.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function (global, factory) {\n\n    \"use strict\";\n\n    if (typeof module === \"object\" && typeof module.exports === \"object\") {\n        module.exports = factory(global, true);\n    } else {\n        if (typeof define === 'function' && define.amd) {\n            define(factory);\n        } else {\n            factory(global);\n        }\n    }\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n    \"use strict\";\n\n    /**\n     * http状态码，对应的返回信息，由于websocket不存在状态码，暂时由前端对返回信息进行匹配\n        错误码：406   错误信息：Failed to send message to WPS\n        错误码：406   错误信息：Json parse failed\n        错误码：406   错误信息：Product not found\n        错误码：406   错误信息：Failed\n        错误码：403   错误信息：Forbidden\n        错误码：503   错误信息：Service Unavailable\n        错误码：417   错误信息：WPSInnerMessage_InvalidBusinessId\n     */\n    var httpCodeErrorMessageList = [\n        'Failed to send message to WPS',\n        'Json parse failed',\n        'Product not found',\n        'Failed',\n        'Forbidden',\n        'Service Unavailable',\n        'WPSInnerMessage_InvalidBusinessId'\n    ]\n\n    var bFinished = true;\n\n    var serverVersion = 'wait';\n    var wpsinvokeNetType='wait';\n\n    if(sessionStorage.getItem('wpsinvokeNetType')) {\n        wpsinvokeNetType = sessionStorage.getItem('wpsinvokeNetType');\n    };\n    \n    if(sessionStorage.getItem('serverVersion')) {\n        serverVersion = sessionStorage.getItem('serverVersion');\n    };\n    \n    function isReplaceWebSocket() {\n        if( wpsinvokeNetType === 'websocket' ) {\n            return true;\n        } else {\n            return false;\n        };\n    }\n\n    /**\n     * ws、http互相替换链接\n     * @param {*} url 请求链接\n     * @returns \n     */\n    function transferWebsocketToHttp(url) {\n        return url.replace('ws://','http://').replace(':58892',':58890');\n    }\n\n    function transferHttpToWebsocket(url) {\n        return url.replace('http://','ws://').replace(':58890',':58892');\n    }\n\n    /**\n     * 获取网页路径前缀\n     * @returns url前缀\n     */\n     function GetUrlBase() {\n        if(isReplaceWebSocket()){\n            if (location.protocol == \"https:\")\n                return 'wss://127.0.0.1:58893'\n            return 'ws://127.0.0.1:58892'\n        }\n        return getHttpUrl();\n    }\n\n    /**\n     * 获取http链接\n     */\n    function getHttpUrl (){\n        if (location.protocol == \"https:\")\n            return \"https://127.0.0.1:58891\"\n        return \"http://127.0.0.1:58890\"\n    }\n\n    /**\n     * 兼容IE低版本Array没有indexOf方法的场景\n     */\n    if (!Array.prototype.indexOf) {\n        Array.prototype.indexOf = function (elt /*, from*/) {\n            var len = this.length >>> 0;\n\n            var from = Number(arguments[1]) || 0;\n            from = (from < 0)\n                ? Math.ceil(from)\n                : Math.floor(from);\n            if (from < 0)\n                from += len;\n\n            for (; from < len; from++) {\n                if (from in this &&\n                    this[from] === elt)\n                    return from;\n            }\n            return -1;\n        };\n    }\n\n    /**\n     * 判断是否函数\n     */\n    function isFunction(func) {\n        return typeof func === 'function';\n    }\n\n    /**\n     * websocket对象\n     */\n    function getWebsocketObj(){\n       this.onopen = null;\n       this.onmessage = null;\n       this.onclose = null;\n       this.onerror = null;\n       this.wsInstance = null;\n    }\n\n    getWebsocketObj.prototype.connect = function(url) {\n        var that = this;\n        var ws = that.wsInstance = new WebSocket(url);\n        ws.onopen = function(res) {\n            if(isFunction(that.onopen)) {\n                that.onopen(res);\n            }\n        }\n\n        ws.onmessage = function(res) {\n            if(isFunction(that.onmessage)) {\n                that.onmessage(res);\n            }\n        }\n\n        ws.onclose = function(res) {\n            if(isFunction(that.onclose)) {\n                that.onclose(res);\n            }\n        }\n\n        ws.onerror = function(res) {\n            if(isFunction(that.onerror)) {\n                that.onerror(res);\n            }\n        }\n    }\n\n    getWebsocketObj.prototype.send = function(data) {\n        if(this.wsInstance) {\n            this.wsInstance.send(data)\n        }\n    }\n\n    getWebsocketObj.prototype.close = function() {\n        if(this.wsInstance) {\n            this.wsInstance.close()\n        }\n    }\n    \n\n    /**\n     * 兼容IE低版本的创建httpobj对象的方法\n     * @returns httpobj，可用于进行数据传输的http的对象\n     */\n    function getHttpObj() {\n        var httpobj = null;\n        if (IEVersion() < 10) {\n            try {\n                httpobj = new XDomainRequest();\n            } catch (e1) {\n                httpobj = new createXHR();\n            }\n        } else {\n            httpobj = new createXHR();\n        }\n        return httpobj;\n    }\n    //兼容IE低版本的创建xmlhttprequest对象的方法\n    /**\n     * 兼容IE低版本的创建xmlhttprequest对象的方法\n     * @returns xmlhttprequest对象，兼容低版本IE\n     */\n    function createXHR() {\n        if (typeof XMLHttpRequest != 'undefined') { //兼容高版本浏览器\n            return new XMLHttpRequest();\n        } else if (typeof ActiveXObject != 'undefined') { //IE6 采用 ActiveXObject， 兼容IE6\n            var versions = [ //由于MSXML库有3个版本，因此都要考虑\n                'MSXML2.XMLHttp.6.0',\n                'MSXML2.XMLHttp.3.0',\n                'MSXML2.XMLHttp'\n            ];\n\n            for (var i = 0; i < versions.length; i++) {\n                try {\n                    return new ActiveXObject(versions[i]);\n                } catch (e) {\n                    //跳过\n                }\n            }\n        } else {\n            throw new Error('您的浏览器不支持XHR对象');\n        }\n    }\n\n    /**\n     * 加载项本地服务返回的错误信息，统一为data ： message的json格式\n     * 如果有新增错误信息，添加到下面\n     * 也可以通过请求状态码返回错误信息\n     */\n    var errorMsg = [\n        \"{\\\"data\\\": \\\"Failed to send message to WPS.\\\"}\",\n        \"{\\\"data\\\": \\\"Json parse failed.\\\"}\",\n        \"{\\\"error\\\": \\\"Json parse failed.\\\"}\"\n    ]\n    /**\n     * 通过该接口给服务器发请求\n     * @param {*} options       参数对象，具体包含的参数如下：\n     * @param {*} url           网页路径，传输地址\n     * @param {*} type          传输类型，POST / GET / PUT\n     * @param {*} sendData      传输的数据\n     * @param {*} callBack      回调函数\n     * @param {*} tryCount      请求失败后的尝试次数\n     * @param {*} bPop          是否弹出浏览器提示对话框\n     * @param {*} timeout       请求等待响应的时间，超过时间请求实效\n     * @param {*} concurrent    请求是否同步发送\n     * @param {*} wpsclient        wpsclient对象\n     * @returns NULL\n     */\n    function startWps(options) {\n        if (!bFinished && !options.concurrent) {\n            if (options.callBack)\n                options.callBack({\n                    status: 1,\n                    message: \"上一次请求没有完成\"\n                });\n            return;\n        }\n        if (!options.concurrent)\n            bFinished = false;\n        else\n            options.bFinished = false;\n\n        function startWpsInnder(tryCount) {\n            if (tryCount <= 0) {\n                // http失败重试时，会唤醒云服务，当重试次数清0时，向云服务发起一次ws请求确认是否是浏览器安全问题\n                if(serverVersion === 'wait' && wpsinvokeNetType === 'wait') {\n                    options.url = transferHttpToWebsocket(options.url);\n                    startWpsInnderWebsocket(1);\n                    return\n                };\n                if (!options.concurrent) {\n                    if (bFinished)\n                        return;\n                    bFinished = true;\n                } else {\n                    if (options.bFinished) {\n                        return;\n                    }\n                    options.bFinished = true;\n                }\n                if (options.callBack)\n                    options.callBack({\n                        status: 2,\n                        message: \"请允许浏览器打开WPS Office\"\n                    });\n                return;\n            }\n            var xmlReq = getHttpObj();\n            //WPS客户端提供的接收参数的本地服务，HTTP服务端口为58890，HTTPS服务端口为58891\n            //这俩配置，取一即可，不可同时启用\n            xmlReq.open('POST', options.url);\n            xmlReq.onload = function (res) {\n                wpsinvokeNetType=\"http\"\n                sessionStorage.setItem(\"wpsinvokeNetType\",wpsinvokeNetType);\n                var responseStr = IEVersion() < 10 ? xmlReq.responseText : res.target.response;\n                var respStatus = IEVersion() < 10 ? xmlReq.status : res.target.status;\n                if (!options.concurrent)\n                    bFinished = true;\n                else\n                    options.bFinished = true;\n                if (options.callBack) {\n                    if ((respStatus != undefined && respStatus != 200) || errorMsg.indexOf(responseStr) != -1) {\n                        var errorMessage = JSON.parse(responseStr)\n                        options.callBack({\n                            status: 1,\n                            message: errorMessage.data\n                        });\n                        if (errorMessage.data == \"Subserver not available.\" && tryCount == options.tryCount && options.bPop) {\n                            InitWpsCloudSvr();\n                            setTimeout(function () {\n                                startWpsInnder(tryCount - 1)\n                            }, 3000);\n                        }\n                    }\n                    else {\n                        options.callBack({\n                            status: 0,\n                            response: responseStr\n                        });\n                    }\n                }\n            }\n            xmlReq.ontimeout = xmlReq.onerror = function (res) {\n                xmlReq.bTimeout = true;\n                if (tryCount == options.tryCount && options.bPop&&wpsinvokeNetType==\"wait\") { //打开wps并传参\n                    InitWpsCloudSvr();\n                }\n                setTimeout(function () {\n                    startWpsInnder(tryCount - 1)\n                }, 1000);\n            }\n            if (IEVersion() < 10) {\n                xmlReq.onreadystatechange = function () {\n                    if (xmlReq.readyState != 4)\n                        return;\n                    if (xmlReq.bTimeout) {\n                        return;\n                    }\n                    if (xmlReq.status === 200)\n                        xmlReq.onload();\n                    else\n                        xmlReq.onerror();\n                }\n            }\n            xmlReq.timeout = options.timeout;\n            xmlReq.send(options.sendData)\n        }\n\n        function startWpsInnderWebsocket(tryCount){\n            // 重试次数结束时，标记请求已完成\n            if (tryCount <= 0) {\n                if (!options.concurrent) {\n                    if (bFinished)\n                        return;\n                    bFinished = true;\n                } else {\n                    if (options.bFinished) {\n                        return;\n                    }\n                    options.bFinished = true;\n                }\n                if (options.callBack)\n                    options.callBack({\n                        status: 2,\n                        message: \"请允许浏览器打开WPS Office\"\n                    });\n                return;\n            }\n           var ws = new getWebsocketObj({ timeout:options.timeout });\n           ws.connect(options.url);\n           ws.onmessage = function(res) {\n                wpsinvokeNetType=\"websocket\"\n                sessionStorage.setItem(\"wpsinvokeNetType\",wpsinvokeNetType);\n                var responseStr = res.data;\n                if (!options.concurrent)\n                bFinished = true;\n                else\n                    options.bFinished = true;\n                if (options.callBack) {\n                    if (errorMsg.indexOf(responseStr) != -1 || httpCodeErrorMessageList.indexOf(responseStr) != -1 ) {\n                        var errorMessage = JSON.parse(responseStr);\n                        options.callBack({\n                            status: 1,\n                            message: errorMessage.data\n                        });\n                        if (errorMessage.data == \"Subserver not available.\" && tryCount == options.tryCount && options.bPop) {\n                            InitWpsCloudSvr();\n                            setTimeout(function () {\n                                startWpsInnderWebsocket(tryCount - 1)\n                            }, 3000);\n                        }\n                    }\n                    else {\n                        options.callBack({\n                            status: 0,\n                            response: res.data\n                        });\n                    }\n                }\n                ws.close();\n           }\n            ws.onerror = function(res){\n                \n                if (tryCount == options.tryCount && options.bPop&&wpsinvokeNetType==\"wait\") { //打开wps并传参\n                    InitWpsCloudSvr();\n                }\n                setTimeout(function () {\n                    startWpsInnderWebsocket(tryCount - 1)\n                }, 1000);\n           }\n           ws.onopen = function(res){\n            ws.send(options.sendData);\n           }\n        }\n        if(isReplaceWebSocket()){\n            startWpsInnderWebsocket(options.tryCount);\n        } else {\n            startWpsInnder(options.tryCount);\n        }\n        return;\n    }\n\n    var fromCharCode = String.fromCharCode;\n    // encoder stuff\n    var cb_utob = function (c) {\n        if (c.length < 2) {\n            var cc = c.charCodeAt(0);\n            return cc < 0x80 ? c :\n                cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) +\n                    fromCharCode(0x80 | (cc & 0x3f))) :\n                    (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n                        fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n                        fromCharCode(0x80 | (cc & 0x3f)));\n        } else {\n            var cc = 0x10000 +\n                (c.charCodeAt(0) - 0xD800) * 0x400 +\n                (c.charCodeAt(1) - 0xDC00);\n            return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) +\n                fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) +\n                fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n                fromCharCode(0x80 | (cc & 0x3f)));\n        }\n    };\n    var re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n    var utob = function (u) {\n        return u.replace(re_utob, cb_utob);\n    };\n    var _encode = function (u) {\n        var isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]';\n        if (isUint8Array)\n            return u.toString('base64')\n        else\n            return btoa(utob(String(u)));\n    }\n\n    if (typeof window.btoa !== 'function') window.btoa = func_btoa;\n\n    function func_btoa(input) {\n        var str = String(input);\n        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n        for (\n            // initialize result and counter\n            var block, charCode, idx = 0, map = chars, output = '';\n            // if the next str index does not exist:\n            //   change the mapping table to \"=\"\n            //   check if d has no fractional digits\n            str.charAt(idx | 0) || (map = '=', idx % 1);\n            // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n            output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n        ) {\n            charCode = str.charCodeAt(idx += 3 / 4);\n            if (charCode > 0xFF) {\n                throw new InvalidCharacterError(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n            }\n            block = block << 8 | charCode;\n        }\n        return output;\n    }\n\n    if (typeof window.atob !== 'function') window.atob = func_atob;\n\n    function func_atob(input) {\n        var output = input.replace(/[\\s\\S]{1,4}/g, cb_decode);\n        return output\n    }\n\n    function cb_decode(cccc) {\n        var len = cccc.length\n            , padlen = len % 4\n            , n = (len > 0 ?\n                b64tab[cccc.charAt(0)] << 18 : 0) |\n                (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)\n                | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)\n                | (len > 3 ? b64tab[cccc.charAt(3)] : 0)\n            , chars = [\n                fromCharCode(n >>> 16),\n                fromCharCode((n >>> 8) & 0xff),\n                fromCharCode(n & 0xff)\n            ]\n            ;\n        chars.length -= [0, 0, 2, 1][padlen];\n        return chars.join('');\n    };\n\n    function btou(b) {\n        return b.replace(re_btou, cb_btou);\n    };\n\n    // decoder stuff\n    var re_btou = new RegExp([\n        '[\\xC0-\\xDF][\\x80-\\xBF]',\n        '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n        '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n    ].join('|'), 'g');\n\n    function cb_btou(cccc) {\n        switch (cccc.length) {\n            case 4:\n                var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                    | ((0x3f & cccc.charCodeAt(1)) << 12)\n                    | ((0x3f & cccc.charCodeAt(2)) << 6)\n                    | (0x3f & cccc.charCodeAt(3)),\n                    offset = cp - 0x10000;\n                return (fromCharCode((offset >>> 10) + 0xD800)\n                    + fromCharCode((offset & 0x3FF) + 0xDC00));\n            case 3:\n                return fromCharCode(\n                    ((0x0f & cccc.charCodeAt(0)) << 12)\n                    | ((0x3f & cccc.charCodeAt(1)) << 6)\n                    | (0x3f & cccc.charCodeAt(2))\n                );\n            default:\n                return fromCharCode(\n                    ((0x1f & cccc.charCodeAt(0)) << 6)\n                    | (0x3f & cccc.charCodeAt(1))\n                );\n        }\n    };\n\n    /**\n     * 将字符串进行Base64编码\n     * @param {*} u         需要编码的数据\n     * @param {*} urisafe   返回值，编码后的数据\n     * @returns             urisafe\n     */\n    var encode = function (u, urisafe) {\n        return !urisafe ?\n            _encode(u) :\n            _encode(String(u)).replace(/[+\\/]/g, function (m0) {\n                return m0 == '+' ? '-' : '_';\n            }).replace(/=/g, '');\n    };\n\n    var decode = function (u) {\n        return btou(atob(String(u)));\n    }\n    /**\n     * 获取IE浏览器版本\n     * @returns     IE浏览器版本\n     */\n    function IEVersion() {\n        var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串  \n        var isIE = userAgent.indexOf(\"compatible\") > -1 && userAgent.indexOf(\"MSIE\") > -1; //判断是否IE<11浏览器  \n        var isEdge = userAgent.indexOf(\"Edge\") > -1 && !isIE; //判断是否IE的Edge浏览器  \n        var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf(\"rv:11.0\") > -1;\n        if (isIE) {\n            var reIE = new RegExp(\"MSIE (\\\\d+\\\\.\\\\d+);\");\n            reIE.test(userAgent);\n            var fIEVersion = parseFloat(RegExp[\"$1\"]);\n            if (fIEVersion == 7) {\n                return 7;\n            } else if (fIEVersion == 8) {\n                return 8;\n            } else if (fIEVersion == 9) {\n                return 9;\n            } else if (fIEVersion == 10) {\n                return 10;\n            } else {\n                return 6; //IE版本<=7\n            }\n        } else if (isEdge) {\n            return 20; //edge\n        } else if (isIE11) {\n            return 11; //IE11  \n        } else {\n            return 30; //不是ie浏览器\n        }\n    }\n\n    /**\n     * 启动wps客户端，加载项执行操作，无返回值\n     * @param {*} options       参数对象，详情见下：\n     * @param {*} clientType    加载项类型， wps / wpp / et\n     * @param {*} name          加载项名称\n     * @param {*} func          客户端加载项要执行的方法\n     * @param {*} param         客户端家乡执行方法的参数\n     * @param {*} urlBase       网页路径前缀\n     * @param {*} callBack      回调函数\n     * @param {*} tryCount      请求失败后的尝试次数\n     * @param {*} bPop          是否弹出浏览器提示对话框\n     * @param {*} wpsclient     wpsclient对象\n     */\n    function WpsStart(options) {\n        var startInfo = {\n            \"name\": options.name,\n            \"function\": options.func,\n            \"info\": options.param.param,\n            \"jsPluginsXml\": options.param.jsPluginsXml\n        };\n        var strData = JSON.stringify(startInfo);\n        if (IEVersion() < 10) {\n            try {\n                eval(\"strData = '\" + JSON.stringify(startInfo) + \"';\");\n            } catch (err) {\n\n            }\n        }\n\n        var baseData = encode(strData);\n        var url = options.urlBase + \"/\" + options.clientType + \"/runParams\";\n        var data = \"ksowebstartup\" + options.clientType + \"://\" + baseData;\n        startWps({\n            url: url,\n            sendData: data,\n            callBack: options.callBack,\n            tryCount: options.tryCount,\n            bPop: options.bPop,\n            timeout: 5000,\n            concurrent: false,\n            wpsclient: options.wpsclient\n        });\n    }\n\n    /**\n     * 服务端版本为空时，通过该接口启动wps\n     * @param {*} options       参数对象，详情见下：\n     * @param {*} clientType    加载项类型， wps / wpp / et\n     * @param {*} name          加载项名称\n     * @param {*} func          客户端加载项要执行的方法\n     * @param {*} param         客户端家乡执行方法的参数\n     * @param {*} urlBase       网页路径前缀\n     * @param {*} callBack      回调函数\n     * @param {*} wpsclient     wpsclient对象\n     * @param {*} concurrent    请求是否同步发送\n     */\n    function WpsStartWrap(options) {\n        WpsStart({\n            clientType: options.clientType,\n            name: options.name,\n            func: options.func,\n            param: options.param,\n            urlBase: options.urlBase,\n            callBack: options.callBack,\n            tryCount: 4,\n            bPop: true,\n            wpsclient: options.wpsclient,\n        })\n    }\n\n    /**\n     * 支持浏览器触发，WPS有返回值的启动\n     *\n     * @param {*} clientType\t组件类型\n     * @param {*} name\t\t\tWPS加载项名称\n     * @param {*} func\t\t\tWPS加载项入口方法\n     * @param {*} param\t\t\t参数：包括WPS加载项内部定义的方法，参数等\n     * @param {*} callBack\t\t回调函数\n     * @param {*} tryCount\t\t重试次数\n     * @param {*} bPop\t\t\t是否弹出浏览器提示对话框\n     */\n    function WpsStartWrapExInner(options) {\n        var infocontent = options.param.param;\n        var cmdId = guid();\n        if (!options.wpsclient || options.wpsclient.single) {\n            infocontent = JSON.stringify(options.param.param);\n            var rspUrl = getHttpUrl() + \"/transferEcho/runParams\";\n            var funcEx = \"var res = \" + options.func;\n            var cbCode = \"var xhr = new XMLHttpRequest();xhr.open('POST', '\" + rspUrl + \"');xhr.send(JSON.stringify({id: '\" + cmdId + \"', response: res}));\" //res 为func执行返回值\n            var infoEx = infocontent + \");\" + cbCode + \"void(0\";\n            options.func = funcEx;\n            infocontent = infoEx;\n        }\n        var startInfo = {\n            \"name\": options.name,\n            \"function\": options.func,\n            \"info\": infocontent,\n            \"showToFront\": options.param.showToFront,\n            \"jsPluginsXml\": options.param.jsPluginsXml,\n        };\n\n        var strData = JSON.stringify(startInfo);\n        if (IEVersion() < 10) {\n            try {\n                eval(\"strData = '\" + JSON.stringify(startInfo) + \"';\");\n            } catch (err) {\n\n            }\n        }\n\n        var baseData = encode(strData);\n        var wrapper;\n\n        if (!options.wpsclient || options.wpsclient.single) {\n            var url = options.urlBase + \"/transfer/runParams\";\n            var data = \"ksowebstartup\" + options.clientType + \"://\" + baseData;\n            wrapper = {\n                id: cmdId,\n                app: options.clientType,\n                data: data,\n                serverId: serverId,\n                mode: options.silentMode ? true : false,\n                timeout: options.timeout,\n                startparam: options.startparam,\n            };\n        }\n        else {\n            var url = options.urlBase + \"/transferEx/runParams\";\n            wrapper = {\n                id: options.wpsclient.clientId,\n                app: options.clientType,\n                data: baseData,\n                mode: options.wpsclient.silentMode ? \"true\" : \"false\",\n                serverId: serverId,\n                timeout: options.timeout,\n                startparam: options.startparam,\n            };\n        }\n        wrapper = JSON.stringify(wrapper);\n        startWps({\n            url: url,\n            sendData: wrapper,\n            callBack: options.callBack,\n            tryCount: options.tryCount,\n            bPop: options.bPop,\n            timeout: 0,\n            concurrent: options.concurrent,\n            wpsclient: options.wpsclient\n        });\n    }\n\n    /**\n     * 获取服务端版本号的接口\n     * @param {*} options       参数对象，详情见下：\n     * @param {*} clientType    加载项类型， wps / wpp / et\n     * @param {*} name          加载项名称\n     * @param {*} func          客户端加载项要执行的方法\n     * @param {*} param         客户端家乡执行方法的参数\n     * @param {*} urlBase       网页路径前缀\n     * @param {*} callBack      回调函数\n     * @param {*} wpsclient     wpsclient对象\n     * @param {*} concurrent    请求是否同步发送   \n     */\n    function WpsStartWrapVersionInner(options) {\n        if (serverVersion == \"wait\") {\n            if (g_isSdkInited == true) {\n                InitWpsCloudSvr();\n            }\n            startWps({\n                url: options.urlBase + '/version',\n                sendData: JSON.stringify({ serverId: serverId }),\n                callBack: function (res) {\n                    if (res.status !== 0) {\n                        options.callBack(res)\n                        return;\n                    }\n                    serverVersion = res.response;\n                    sessionStorage.setItem('serverVersion', serverVersion);\n                    // 确定版本不能使用ws后，需要把未启动时定义好的协议调整回来\n                    if(wpsinvokeNetType === 'websocket') {\n                        options.urlBase = transferWebsocketToHttp(options.urlBase) \n                    }\n                    if (options.isPublish != true) {\n                        options.tryCount = 1\n                        options.bPop = false\n                        if (serverVersion === \"\") {\n                            WpsStart(options)\n                        } else if (serverVersion < \"1.0.1\" && options.wpsclient) {\n                            options.wpsclient.single = true;\n                            WpsStartWrapExInner(options);\n                        } else {\n                            WpsStartWrapExInner(options);\n                        }\n                    }\n                    else {\n                        if (serverVersion === \"\") {\n                            callBack({\n                                status: 4,\n                                message: \"当前客户端不支持，请升级客户端\"\n                            })\n                        } else {\n                            WpsAddonGetAllConfigInner(options.callBack)\n                        }\n                    }\n                },\n                tryCount: 4,\n                bPop: !g_isSdkInited,\n                timeout: 5000,\n                concurrent: options.concurrent\n            });\n        } else {\n            if (options.isPublish != true) {\n                options.tryCount = 4\n                options.bPop = true\n                if (serverVersion === \"\") {\n                    WpsStartWrap(options)\n                } else if (serverVersion < \"1.0.1\" && options.wpsclient) {\n                    options.wpsclient.single = true;\n                    WpsStartWrapExInner(options);\n                } else {\n                    WpsStartWrapExInner(options);\n                }\n            }\n            else {\n                if (serverVersion === \"\") {\n                    callBack({\n                        status: 4,\n                        message: \"当前客户端不支持，请升级客户端\"\n                    })\n                } else {\n                    WpsAddonGetAllConfigInner(options.callBack)\n                }\n            }\n        }\n    }\n\n    var HeartBeatCode =\n        \"function getHttpObj() {\\n\"\n        + \"            var httpobj = null;\\n\"\n        + \"            if (IEVersion() < 10) {\\n\"\n        + \"                try {\\n\"\n        + \"                    httpobj = new XDomainRequest();\\n\"\n        + \"                } catch (e1) {\\n\"\n        + \"                    httpobj = new createXHR();\\n\"\n        + \"                }\\n\"\n        + \"            } else {\\n\"\n        + \"                httpobj = new createXHR();\\n\"\n        + \"            }\\n\"\n        + \"            return httpobj;\\n\"\n        + \"        }\\n\"\n        + \"        \\n\"\n        + \"        function createXHR() {\\n\"\n        + \"            if (typeof XMLHttpRequest != 'undefined') {\\n\"\n        + \"                return new XMLHttpRequest();\\n\"\n        + \"            } else if (typeof ActiveXObject != 'undefined') {\\n\"\n        + \"                var versions = [\\n\"\n        + \"                    'MSXML2.XMLHttp.6.0',\\n\"\n        + \"                    'MSXML2.XMLHttp.3.0',\\n\"\n        + \"                    'MSXML2.XMLHttp'\\n\"\n        + \"                ];\\n\"\n        + \"        \\n\"\n        + \"                for (var i = 0; i < versions.length; i++) {\\n\"\n        + \"                    try {\\n\"\n        + \"                        return new ActiveXObject(versions[i]);\\n\"\n        + \"                    } catch (e) {\\n\"\n        + \"                        \\n\"\n        + \"                    }\\n\"\n        + \"                }\\n\"\n        + \"            } else {\\n\"\n        + \"                throw new Error('您的浏览器不支持XHR对象');\\n\"\n        + \"            }\\n\"\n        + \"        }\\n\"\n        + \"        \\n\"\n        + \"        function IEVersion() {\\n\"\n        + \"            var userAgent = navigator.userAgent; \\n\"\n        + \"            var isIE = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;\\n\"\n        + \"            var isEdge = userAgent.indexOf('Edge') > -1 && !isIE; \\n\"\n        + \"            var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;\\n\"\n        + \"            if (isIE) {\\n\"\n        + \"                var reIE = new RegExp('MSIE (\\\\d+\\\\.\\\\d+);');\\n\"\n        + \"                reIE.test(userAgent);\\n\"\n        + \"                var fIEVersion = parseFloat(RegExp['$1']);\\n\"\n        + \"                if (fIEVersion == 7) {\\n\"\n        + \"                    return 7;\\n\"\n        + \"                } else if (fIEVersion == 8) {\\n\"\n        + \"                    return 8;\\n\"\n        + \"                } else if (fIEVersion == 9) {\\n\"\n        + \"                    return 9;\\n\"\n        + \"                } else if (fIEVersion == 10) {\\n\"\n        + \"                    return 10;\\n\"\n        + \"                } else {\\n\"\n        + \"                    return 6; \\n\"\n        + \"                }\\n\"\n        + \"            } else if (isEdge) {\\n\"\n        + \"                return 20; \\n\"\n        + \"            } else if (isIE11) {\\n\"\n        + \"                return 11; \\n\"\n        + \"            } else {\\n\"\n        + \"                return 30; \\n\"\n        + \"            }\\n\"\n        + \"        }\\n\"\n        + \"        var heartBeatStart = false;\\n\"\n        + \"        function checkLastRegTime() {\\n\"\n        + \"            var now = new Date().valueOf();\\n\"\n        + \"            var TimeGap = now - LastRegTime;\\n\"\n        + \"            if (TimeGap > 5000 && !heartBeatStart) {\\n\"\n        + \"                HeartBeat();\\n\"\n        + \"                heartBeatStart = true;\\n\"\n        + \"            }\\n\"\n        + \"        }\\n\"\n        + \"        \\n\"\n        + \"        function HeartBeat() {\\n\"\n        + \"            var heartBeatItem = function () {\\n\"\n        + \"                var xhr = getHttpObj();\\n\"\n        + \"                xhr.onload = function (e) {\\n\"\n        + \"                    self.setTimeout(heartBeatItem, 5000);\\n\"\n        + \"                }\\n\"\n        + \"                xhr.onerror = function (e) {\\n\"\n        + \"                    self.setTimeout(heartBeatItem, 5000);\\n\"\n        + \"                }\\n\"\n        + \"                xhr.ontimeout = function (e) {\\n\"\n        + \"                    self.setTimeout(heartBeatItem, 5000);\\n\"\n        + \"                }\\n\"\n        + \"                xhr.open('POST', 'http://127.0.0.1:58890/askwebnotify', true);\\n\"\n        + \"                xhr.timeout = 2000;\\n\"\n        + \"                xhr.send(JSON.stringify(paramStr));\\n\"\n        + \"            }\\n\"\n        + \"            heartBeatItem();\\n\"\n        + \"        }\\n\"\n        + \"        \\n\"\n        + \"        var paramStr;\\n\"\n        + \"        var startCheck = false;\\n\"\n        + \"        self.addEventListener('message', function (event) {\\n\"\n        + \"            var data = event.data;\\n\"\n        + \"                paramStr = data.param\\n\"\n        + \"                paramStr.heartBeat = true\\n\"\n        + \"                LastRegTime = data.LastRegTime;\\n\"\n        + \"                if (!startCheck) {\\n\"\n        + \"                    startCheck = true;\\n\"\n        + \"                    self.setInterval(checkLastRegTime, 5000)\\n\"\n        + \"                }\\n\"\n        + \"        }, false);\\n\"\n\n        var HeartBeatCodeWebSocket =\n        \"  // 判断是否函数 \\n\"\n        + \"  function isFunction(func) { \\n\"\n        + \"    return typeof func === 'function'; \\n\"\n        + \"  } \\n\"\n        + \"  // websocket对象 \\n\"\n        + \"  function getWebsocketObj() { \\n\"\n        + \"    this.onopen = null; \\n\"\n        + \"    this.onmessage = null; \\n\"\n        + \"    this.onclose = null; \\n\"\n        + \"    this.onerror = null; \\n\"\n        + \"    this.wsInstance = null; \\n\"\n        + \"  } \\n\"\n        + \"  getWebsocketObj.prototype.connect = function (url) { \\n\"\n        + \"    var that = this; \\n\"\n        + \"    var ws = (that.wsInstance = new WebSocket(url)); \\n\"\n        + \"    ws.onopen = function (res) { \\n\"\n        + \"      if (isFunction(that.onopen)) { \\n\"\n        + \"        that.onopen(res); \\n\"\n        + \"      } \\n\"\n        + \"    }; \\n\"\n        + \"    ws.onmessage = function (res) { \\n\"\n        + \"      if (isFunction(that.onmessage)) { \\n\"\n        + \"        that.onmessage(res); \\n\"\n        + \"      } \\n\"\n        + \"    }; \\n\"\n        + \"    ws.onclose = function (res) { \\n\"\n        + \"      if (isFunction(that.onclose)) { \\n\"\n        + \"        that.onclose(res); \\n\"\n        + \"      } \\n\"\n        + \"    }; \\n\"\n        + \"    ws.onerror = function (res) { \\n\"\n        + \"      if (isFunction(that.onerror)) { \\n\"\n        + \"        that.onerror(res); \\n\"\n        + \"      } \\n\"\n        + \"    }; \\n\"\n        + \"  }; \\n\"\n        + \"  getWebsocketObj.prototype.send = function (data) { \\n\"\n        + \"    if (this.wsInstance) { \\n\"\n        + \"      this.wsInstance.send(data); \\n\"\n        + \"    } \\n\"\n        + \"  }; \\n\"\n        + \"  getWebsocketObj.prototype.close = function () { \\n\"\n        + \"    if (this.wsInstance) { \\n\"\n        + \"      this.wsInstance.close(); \\n\"\n        + \"    } \\n\"\n        + \"  }; \\n\"\n        + \"  var heartBeatStart = false; \\n\"\n        + \"  function checkLastRegTime() { \\n\"\n        + \"    var now = new Date().valueOf(); \\n\"\n        + \"    var TimeGap = now - LastRegTime; \\n\"\n        + \"    if (TimeGap > 5000 && !heartBeatStart) { \\n\"\n        + \"      HeartBeat(); \\n\"\n        + \"      heartBeatStart = true; \\n\"\n        + \"    } \\n\"\n        + \"  } \\n\"\n        + \"  var ws = null \\n\"\n        + \"  function HeartBeat() { \\n\"\n        + \"    var heartBeatItem = function () { \\n\"\n        + \"      if(ws !== null) { \\n\"\n        + \"        ws.send(JSON.stringify(paramStr)); \\n\"\n        + \"        return; \\n\"\n        + \"      } \\n\"\n        + \"      ws = new getWebsocketObj(); \\n\"\n        + \"      ws.onmessage = function () { \\n\"\n        + \"        self.setTimeout(function() { \\n\"\n        + \"          ws.send(JSON.stringify(paramStr)) \\n\"\n        + \"        }, 5000); \\n\"\n        + \"      }; \\n\"\n        + \"      ws.onclose = function () { \\n\"\n        + \"        ws = null; \\n\"\n        + \"        self.setTimeout(heartBeatItem, 5000); \\n\"\n        + \"      }; \\n\"\n        + \"      ws.connect('ws://127.0.0.1:58892/askwebnotify'); \\n\"\n        + \"      ws.onopen = function () { \\n\"\n        + \"        ws.send(JSON.stringify(paramStr)); \\n\"\n        + \"      }; \\n\"\n        + \"    }; \\n\"\n        + \"    heartBeatItem(); \\n\"\n        + \"  }; \\n\"\n        + \"  var paramStr; \\n\"\n        + \"  var startCheck = false; \\n\"\n        + \"  self.addEventListener( \\n\"\n        + \"    'message', \\n\"\n        + \"    function (event) { \\n\"\n        + \"      var data = event.data; \\n\"\n        + \"      paramStr = data.param; \\n\"\n        + \"      paramStr.heartBeat = true; \\n\"\n        + \"      LastRegTime = data.LastRegTime; \\n\"\n        + \"      if (!startCheck) { \\n\"\n        + \"        startCheck = true; \\n\"\n        + \"        self.setInterval(checkLastRegTime, 5000); \\n\"\n        + \"      } \\n\"\n        + \"    }, \\n\"\n        + \"    false \\n\"\n        + \"  ); \\n\"\n        \n    /**\n     * 生成guid的接口\n     * @returns guid\n     */\n    function guid() {\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n            return v.toString(16);\n        });\n    }\n\n    /**\n     * 开启多用户的接口\n     */\n    var serverId = undefined\n    function EnableMultiUser() {\n        serverId = getServerId();\n        InitSdk(true)\n    }\n\n    /**\n     * 自定义协议启动服务端\n     * 默认不带参数serverId，linux未升级之前不要使用多用户\n     */\n    function InitWpsCloudSvr() {\n        if (serverId == undefined)\n            window.location.href = \"ksoWPSCloudSvr://start=RelayHttpServer\"//是否启动wps弹框\n        else\n            window.location.href = \"ksoWPSCloudSvr://start=RelayHttpServer\" + \"&serverId=\" + serverId //是否启动wps弹框\n    }\n\n    /**\n     * 获取serverId的接口\n     * @returns serverId\n     */\n    function getServerId() {\n        if (window.localStorage) {\n            if (localStorage.getItem(\"serverId\")) {\n                //\n            }\n            else {\n                localStorage.setItem(\"serverId\", guid());\n            }\n            return localStorage.getItem(\"serverId\");\n        }\n        else {\n            return guid();\n        }\n    }\n\n    /**\n     * 将字符串转成二进制，这里用来将字符串化后的js代码转成二进制文件\n     * @param {*} code \n     * @returns js文件对象的url\n     */\n    function codeToBlob(code) {\n        var blob = new Blob([code], { type: 'text/javascript' }); // 生成js文件对象\n        var objectURL = window.URL.createObjectURL(blob); // 生成js文件的url\n        return objectURL;\n    }\n\n    var RegWebNotifyMap = { wps: {}, wpp: {}, et: {}, pdf: {} }\n    var bWebNotifyUseTimeout = true\n    function WebNotifyUseTimeout(value) {\n        bWebNotifyUseTimeout = value ? true : false\n    }\n    var g_businessId = Number(Math.random().toString().substr(3, 5) + Date.parse(new Date())).toString(36);\n    var HeartBeatWorker\n    var checkVersionInterval\n    if (window.Worker) {\n        try {\n            var code = '';\n            HeartBeatWorkerCallBack()\n            checkVersionInterval = setInterval(HeartBeatWorkerCallBack,1000)\n\n        } catch (error) {\n            //\n        }\n    }\n    function HeartBeatWorkerCallBack(){\n        if(serverVersion === 'wait'){\n            return;\n        }\n        if(isReplaceWebSocket()) {\n            code = HeartBeatCodeWebSocket;\n        } else {\n            code = HeartBeatCode\n        };\n        HeartBeatWorker = new Worker(codeToBlob(code));\n        if(checkVersionInterval) {\n            clearInterval(checkVersionInterval);\n        }\n        return;\n    }\n    var g_LastRegTime;\n    /**\n     * 注册一个前端页面接收WPS传来消息的方法\n     * @param {*} clientType wps | et | wpp\n     * @param {*} name WPS加载项的名称\n     * @param {*} callBack 回调函数\n     * @param {*} wpsclient wpsclient对象\n     */\n    function RegWebNotify(clientType, name, callBack, wpsclient) {\n        if (clientType != \"wps\" && clientType != \"wpp\" && clientType != \"et\" && clientType != \"pdf\")\n            return;\n        var paramStr = {}\n        if (wpsclient) {\n            if (wpsclient.notifyRegsitered == true) {\n                return\n            }\n            wpsclient.notifyRegsitered = true;\n            paramStr = {\n                clientId: wpsclient.clientId,\n                name: name,\n                type: clientType,\n                serverId: serverId\n            }\n            \n        }\n        else {\n            if (typeof callBack != 'function')\n                return\n            if (RegWebNotifyMap[clientType][name]) {\n                RegWebNotifyMap[clientType][name] = callBack;\n                return\n            }\n            var RegWebNotifyID = new Date().valueOf() + ''\n            paramStr = {\n                id: RegWebNotifyID,\n                name: name,\n                type: clientType,\n                serverId: serverId\n            }\n            RegWebNotifyMap[clientType][name] = callBack\n        }\n\n        var askItem = function () {\n            var xhr = getHttpObj()\n            xhr.onload = function (e) {\n                if(!WpsInvoke.RegWebNotifyEnable){\n                    RegWebNotifyMap[clientType][name]=null;\n                    return ;\n                }\n                if (xhr.responseText == \"WPSInnerMessage_quit\" || (xhr.status != undefined && xhr.status != 200)||!WpsInvoke.RegWebNotifyEnable) {\n                    if ((!wpsclient || wpsclient.single)) {\n                        window.setTimeout(askItem, 2000);\n                    }\n                    return;\n                }\n                window.setTimeout(askItem, 300)\n                // fix 新版本客户端使用旧版sdk的时候，会出现版本号判断问题\n                if (serverVersion!== \"\" && serverVersion !== \"wait\") {\n                    try {\n                        if (!HeartBeatWorker)\n                            throw new Error();\n                        var resText = JSON.parse(xhr.responseText);\n                        paramStr.messageId = resText.msgId;\n                        if (wpsclient) {\n                            if (resText.data != undefined && paramStr.messageId != undefined)  // 如果发的数据是字符串化后的json对象，这里的resText.data就是一个json对象，可以输出自己想要的json数据\n                                if (typeof resText.data == 'object')\n                                    wpsclient.OnRegWebNotify(JSON.stringify(resText.data))\n                                else\n                                    wpsclient.OnRegWebNotify(resText.data)\n                            else\n                                wpsclient.OnRegWebNotify(xhr.responseText)\n                        } else {\n                            var func = RegWebNotifyMap[clientType][name]\n                            if (resText.data != undefined && paramStr.messageId != undefined)  // 如果发的数据是字符串化后的json对象，这里的resText.data就是一个json对象，可以输出自己想要的json数据\n                                if (typeof resText.data == 'object')\n                                    func(JSON.stringify(resText.data))\n                                else\n                                    func(resText.data)\n                            else\n                                func(xhr.responseText)\n                        }\n                    }\n                    catch (e) {\n                        // 这里做一个容错，即使json解析失败，也要把msgId提取出来，发回给服务端，避免消息清不掉一直重复发送\n                        // 同时把data也取出来，但是格式无法保证\n                        var data\n                        var str = xhr.responseText\n                        var idx1 = str.indexOf(\"\\\"msgId\\\"\")\n                        var idx2\n                        var idx3\n                        var idx4\n                        var data\n                        if (idx1 != -1) {\n                            idx1 = idx1 + 8\n                            idx2 = str.indexOf(\"\\\"data\\\"\") - 2\n                            paramStr.messageId = parseInt(str.substring(idx1, idx2))\n                            idx3 = str.indexOf(\"\\\"data\\\"\") + 8\n                            idx4 = str.length - 2\n                            data = str.substring(idx3, idx4)\n                        }\n                        if (wpsclient) {\n                            if (paramStr.messageId !== undefined && data != undefined)\n                                wpsclient.OnRegWebNotify(data)\n                            else\n                                wpsclient.OnRegWebNotify(xhr.responseText)\n                        } else {\n                            var func = RegWebNotifyMap[clientType][name]\n                            if (paramStr.messageId !== undefined && data != undefined)\n                                func(data)\n                            else\n                                func(xhr.responseText)\n                        }\n                    }\n                }\n                else {\n                    var resText = JSON.parse(xhr.responseText);\n                    paramStr.messageId = resText.msgId;\n                    var resData = decode(resText.data);\n                    if (wpsclient) {\n                        wpsclient.OnRegWebNotify(resData)\n                    }\n                    else {\n                        var func = RegWebNotifyMap[clientType][name]\n                        func(resData)\n                    }\n                }\n            }\n            xhr.onerror = function (e) {\n                if (bWebNotifyUseTimeout)\n                    window.setTimeout(askItem, 1000)\n                else\n                    window.setTimeout(askItem, 10000)\n            }\n            xhr.ontimeout = function (e) {\n                if (bWebNotifyUseTimeout)\n                    window.setTimeout(askItem, 300)\n                else\n                    window.setTimeout(askItem, 10000)\n            }\n            if (IEVersion() < 10) {\n                xhr.onreadystatechange = function () {\n                    if (xhr.readyState != 4)\n                        return;\n                    if (xhr.bTimeout) {\n                        return;\n                    }\n                    if (xhr.status === 200)\n                        xhr.onload();\n                    else\n                        xhr.onerror();\n                }\n            }\n            xhr.open('POST', GetUrlBase() + '/askwebnotify', true)\n            if (bWebNotifyUseTimeout)\n                xhr.timeout = 2000;\n            if (HeartBeatWorker) {\n                g_LastRegTime = new Date().valueOf();\n                var param = {\n                    param: {\n                        name: name,\n                        type: clientType,\n                        businessId: g_businessId,\n                        serverId: serverId\n                    },\n                    LastRegTime: g_LastRegTime\n                }\n                HeartBeatWorker.postMessage(param)\n            }\n            if (HeartBeatWorker) {\n                paramStr.businessId = g_businessId\n            }\n            xhr.send(JSON.stringify(paramStr));\n        }\n\n        // 用途ws发送消失后，客户端一段时间没有回复，自动关闭链接操作\n        var askItemWebsocketTimer = null;\n        // 客户端有消息推送标记\n        var hasResponse = false;\n        // 客户端无消息推送标记\n        var isTimeout = false;\n        var askItemWebsocket = function() {\n            if(!isReplaceWebSocket()) {\n                askItem();\n                return\n            }\n            var ws = new getWebsocketObj();\n            ws.connect(GetUrlBase() + '/askwebnotify');\n            ws.onmessage = function(res){\n                hasResponse = true;\n                ws.close();\n                if(askItemWebsocketTimer !== null){\n                    clearTimeout(askItemWebsocketTimer);\n                    askItemWebsocketTimer = null;\n                }\n                if(!WpsInvoke.RegWebNotifyEnable){\n                    RegWebNotifyMap[clientType][name]=null;\n                    return ;\n                }\n                if (res.data == \"WPSInnerMessage_quit\" || httpCodeErrorMessageList.indexOf(res.data) != -1  ||!WpsInvoke.RegWebNotifyEnable ) {\n                    if ((!wpsclient || wpsclient.single)) {\n                        window.setTimeout(function() {\n                            askItemWebsocket();\n                        }, 2000);\n                    }\n                    return;\n                };\n                window.setTimeout(function() {\n                    askItemWebsocket();\n                }, 300);\n                // fix 新版本客户端使用旧版sdk的时候，会出现版本号判断问题\n                if (serverVersion!== \"\" && serverVersion !== \"wait\") {\n                    try {\n                        if (!HeartBeatWorker)\n                            throw new Error();\n                        var resText = JSON.parse(res.data);\n                        paramStr.messageId = resText.msgId;\n                        if (wpsclient) {\n                            if (resText.data != undefined && paramStr.messageId != undefined)  // 如果发的数据是字符串化后的json对象，这里的resText.data就是一个json对象，可以输出自己想要的json数据\n                                if (typeof resText.data == 'object')\n                                    wpsclient.OnRegWebNotify(JSON.stringify(resText.data))\n                                else\n                                    wpsclient.OnRegWebNotify(resText.data)\n                            else\n                                wpsclient.OnRegWebNotify(res.data)\n                        } else {\n                            var func = RegWebNotifyMap[clientType][name]\n                            if (resText.data != undefined && paramStr.messageId != undefined)  // 如果发的数据是字符串化后的json对象，这里的resText.data就是一个json对象，可以输出自己想要的json数据\n                                if (typeof resText.data == 'object')\n                                    func(JSON.stringify(resText.data))\n                                else\n                                    func(resText.data)\n                            else\n                                func(res.data)\n                        }\n                    }\n                    catch (e) {\n                        // 这里做一个容错，即使json解析失败，也要把msgId提取出来，发回给服务端，避免消息清不掉一直重复发送\n                        // 同时把data也取出来，但是格式无法保证\n                        var data\n                        var str = res.data\n                        var idx1 = str.indexOf(\"\\\"msgId\\\"\")\n                        var idx2\n                        var idx3\n                        var idx4\n                        var data\n                        if (idx1 != -1) {\n                            idx1 = idx1 + 8\n                            idx2 = str.indexOf(\"\\\"data\\\"\") - 2\n                            paramStr.messageId = parseInt(str.substring(idx1, idx2))\n                            idx3 = str.indexOf(\"\\\"data\\\"\") + 8\n                            idx4 = str.length - 2\n                            data = str.substring(idx3, idx4)\n                        }\n                        if (wpsclient) {\n                            if (paramStr.messageId !== undefined && data != undefined)\n                                wpsclient.OnRegWebNotify(data)\n                            else\n                                wpsclient.OnRegWebNotify(res.data)\n                        } else {\n                            var func = RegWebNotifyMap[clientType][name]\n                            if (paramStr.messageId !== undefined && data != undefined)\n                                func(data)\n                            else\n                                func(res.data)\n                        }\n                    }\n                }\n                else {\n                    var resText = res.data;\n                    paramStr.messageId = resText.msgId;\n                    var resData = decode(resText.data);\n                    if (wpsclient) {\n                        wpsclient.OnRegWebNotify(resData)\n                    }\n                    else {\n                        var func = RegWebNotifyMap[clientType][name]\n                        func(resData)\n                    }\n                }\n            };\n\n            ws.onclose = function (e) {\n                // 正常有请求响应，不做处理由onmessage进行递归\n                if(hasResponse === true){\n                    hasResponse = false;\n                    return\n                };\n                // 超时处理\n                if(isTimeout === true) {\n                    isTimeout = false;\n                    if (bWebNotifyUseTimeout)\n                        window.setTimeout(askItemWebsocket, 300);\n                    else\n                        window.setTimeout(askItemWebsocket, 10000);\n                    return\n                };\n                // 异常处理\n                if (bWebNotifyUseTimeout)\n                    window.setTimeout(askItemWebsocket, 1000);\n                else\n                    window.setTimeout(askItemWebsocket, 10000);\n            }\n\n            ws.onopen = function(){\n                if (HeartBeatWorker) {\n                    paramStr.businessId = g_businessId\n                }\n                ws.send(JSON.stringify(paramStr));\n                askItemWebsocketTimer = window.setTimeout(function() {\n                    isTimeout = true;\n                    ws.close();\n                    askItemWebsocketTimer = null;\n                }, 2000);\n            };\n\n            if (HeartBeatWorker) {\n                g_LastRegTime = new Date().valueOf();\n                var param = {\n                    param: {\n                        name: name,\n                        type: clientType,\n                        businessId: g_businessId,\n                        serverId: serverId\n                    },\n                    LastRegTime: g_LastRegTime\n                }\n                HeartBeatWorker.postMessage(param)\n            }\n        };\n        if(isReplaceWebSocket()) {\n            askItemWebsocket();\n        } else {\n            askItem();\n        }\n    }\n\n    /**\n     * 获取服务端版本号的接口，这里主要是初始化一些参数\n     * @param {*} clientType    加载项类型， wps / wpp / et\n     * @param {*} name          加载项名称\n     * @param {*} func          客户端加载项要执行的方法\n     * @param {*} param         客户端加载项执行方法的参数\n     * @param {*} callBack      回调函数\n     * @param {*} showToFront   设置客户端是否显示到前面\n     * @param {*} jsPluginsXml  设置加载项路径\n     * @param {*} silentMode    是否是静默启动\n     * @param {*} timeout       设置客户端启动超时时间（透传客户端内部执行），单位为ms\n     * @param {*} startparam    传递给wps客户端的启动参数\n     */\n    function WpsStartWrapVersion(clientType, name, func, param, callBack, showToFront, jsPluginsXml, silentMode, timeout, startparam) {\n        var paramEx = {\n            jsPluginsXml: jsPluginsXml ? jsPluginsXml : \"\",\n            showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,\n            param: (typeof (param) == 'object' ? param : JSON.parse(param))\n        }\n        var options = {\n            clientType: clientType,\n            name: name,\n            func: func,\n            param: paramEx,\n            urlBase: GetUrlBase(),\n            callBack: callBack,\n            wpsclient: undefined,\n            concurrent: true,\n            silentMode: silentMode,\n            timeout: timeout,\n            startparam: startparam,\n        }\n        WpsStartWrapVersionInner(options);\n    }\n\n    //从外部浏览器远程调用 WPS 加载项中的方法\n    var WpsInvoke = {\n        InvokeAsHttp: WpsStartWrapVersion,\n        InvokeAsHttps: WpsStartWrapVersion,\n        RegWebNotify: RegWebNotify,\n        ClientType: {\n            wps: \"wps\",\n            et: \"et\",\n            wpp: \"wpp\",\n            pdf: \"pdf\"\n        },\n        CreateXHR: getHttpObj,\n        IsClientRunning: IsClientRunning,\n        GetVersion: GetVersion,\n        RegWebNotifyEnable:true\n    }\n\n    /**\n     * @constructor WpsClient           wps客户端\n     * @param {string} clientType       必传参数，加载项类型，有效值为\"wps\",\"wpp\",\"et\"；分别表示文字，演示，电子表格\n     */\n    function WpsClient(clientType) {\n        /**\n         * 设置RegWebNotify的回调函数，加载项给业务端发消息通过该函数\n         * @memberof WpsClient\n         * @member onMessage\n         */\n        this.onMessage;\n\n        /**\n         * 设置加载项路径\n         * @memberof WpsClient\n         * @member jsPluginsXml\n         */\n        this.jsPluginsXml;\n\n        /**\n         * 内部成员，外部无需调用\n         */\n        this.notifyRegsitered = false;\n        this.clientId = \"\";\n        this.concurrent = true;\n        this.clientType = clientType;\n\n        /**\n         * 内部函数，外部无需调用\n         * @param {*} options \n         */\n        this.initWpsClient = function (options) {\n            options.clientType = this.clientType\n            options.wpsclient = this\n            options.concurrent = this.concurrent\n            WpsStartWrapVersionInner(options)\n        }\n\n        /**\n         * 以http启动\n         * @param {string} name              加载项名称\n         * @param {string} func              要调用的加载项中的函数行\n         * @param {string} param             在加载项中执行函数func要传递的数据\n         * @param {function({int, string})} callBack        回调函数，status = 0 表示成功，失败请查看message信息\n         * @param {bool} showToFront         设置wps是否显示到前面来\n         * @param {*} timeout       设置客户端启动超时时间（透传客户端内部执行），单位为ms\n         * @param {*} startparam    传递给wps客户端的启动参数\n         * @return {string}                  \"Failed to send message to WPS.\" 发送消息失败，客户端已关闭；\n         *                                   \"WPS Addon is not response.\" 加载项阻塞，函数执行失败\n         */\n        this.InvokeAsHttp = function (name, func, param, callBack, showToFront, timeout, startparam) {\n            function clientCallback(res) {\n                //this不是WpsClient，是options对象\n                if (res.status !== 0 || serverVersion < \"1.0.1\" || this.wpsclient.single == true) {\n                    if (callBack)\n                        callBack(res);\n                    if (serverVersion < \"1.0.1\" || this.wpsclient.single == true)\n                        RegWebNotify(clientType, name, this.wpsclient.onMessage)\n                    return;\n                }\n                // fix 新版本客户端使用旧版sdk的时候，会出现版本号判断问题\n                if (serverVersion!== \"\" && serverVersion !== \"wait\") {\n                    try {\n                        var resObject = JSON.parse(res.response);\n                        if (this.wpsclient.clientId == \"\") {\n                            this.wpsclient.clientId = resObject.clientId;\n                        }\n                        if (typeof resObject.data == \"object\")\n                            res.response = JSON.stringify(resObject.data);\n                        else\n                            res.response = resObject.data;\n                    }\n                    catch (e) {\n                        var str = res.response\n                        var idx1 = str.indexOf(\"\\\"clientId\\\":\\\"{\")\n                        var idx2\n                        var idx3\n                        var idx4\n                        if (idx1 != -1) {\n                            idx1 = idx1 + (\"\\\"clientId\\\":\\\"{\").length - 1\n                            idx2 = str.indexOf(\"\\\"data\\\":\") - 3\n                            if (this.wpsclient.clientId == \"\") {\n                                this.wpsclient.clientId = str.substring(idx1, idx2);\n                            }\n                            idx3 = str.indexOf(\"\\\"data\\\":\") + (\"\\\"data\\\":\").length\n                            idx4 = str.length - 1\n                            if (idx3 < idx4)\n                                res.response = str.substring(idx3, idx4)\n                            else\n                                res.response = \"\";\n                        }\n                    }\n                }\n                else {\n                    var resObject = JSON.parse(res.response);\n                    if (this.wpsclient.clientId == \"\") {\n                        this.wpsclient.clientId = resObject.clientId;\n                    }\n                    res.response = decode(resObject.data);\n                }\n                if (IEVersion() < 10)\n                    eval(\" res.response = '\" + res.response + \"';\");\n                if (callBack)\n                    callBack(res);\n                this.wpsclient.RegWebNotify(name);\n            }\n            var paramEx = {\n                jsPluginsXml: this.jsPluginsXml ? this.jsPluginsXml : \"\",\n                showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,\n                param: (typeof (param) == 'object' ? param : JSON.parse(param))\n            }\n            this.initWpsClient({\n                name: name,\n                func: func,\n                param: paramEx,\n                urlBase: GetUrlBase(),\n                callBack: clientCallback,\n                timeout: timeout,\n                startparam: startparam,\n            })\n        }\n\n        /**\n         * 以https启动\n         * @param {string} name              加载项名称\n         * @param {string} func              要调用的加载项中的函数行\n         * @param {string} param             在加载项中执行函数func要传递的数据\n         * @param {function({int, string})} callBack        回调函数，status = 0 表示成功，失败请查看message信息\n         * @param {*} timeout       设置客户端启动超时时间（透传客户端内部执行），单位为ms\n         * @param {*} startparam    传递给wps客户端的启动参数\n         * @param {bool} showToFront         设置wps是否显示到前面来\n         */\n        this.InvokeAsHttps = function (name, func, param, callBack, showToFront, timeout, startparam) {\n            var paramEx = {\n                jsPluginsXml: this.jsPluginsXml ? this.jsPluginsXml : \"\",\n                showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,\n                param: (typeof (param) == 'object' ? param : JSON.parse(param))\n            }\n            this.initWpsClient({\n                name: name,\n                func: func,\n                param: paramEx,\n                urlBase: GetUrlBase(),\n                callBack: callBack,\n                timeout: timeout,\n                startparam: startparam,\n            })\n        }\n\n        /**\n         * 内部函数，外部无需调用\n         * @param {*} name \n         */\n        this.RegWebNotify = function (name) {\n            RegWebNotify(this.clientType, name, null, this);\n        }\n\n        /**\n         * 消息注册函数的回调函数\n         * @param {*} message   客户端发来的消息\n         */\n        this.OnRegWebNotify = function (message) {\n            if (this.onMessage)\n                this.onMessage(message)\n        }\n\n        /**\n         * 以静默模式启动客户端\n         * @param {string} name                 必传参数，加载项名称\n         * @param {*} timeout       设置客户端启动超时时间（透传客户端内部执行），单位为ms\n         * @param {*} startparam    传递给wps客户端的启动参数\n         * @param {function({int, string})} [callBack]         回调函数，status = 0 表示成功，失败请查看message信息\n         */\n        this.StartWpsInSilentMode = function (name, callBack, timeout, startparam) {\n            function initCallback(res) {\n                //this不是WpsClient，是options对象\n                if (res.status !== 0 || serverVersion < \"1.0.1\" || this.wpsclient.single == true) {\n                    if (callBack)\n                        callBack(res);\n                    if (serverVersion < \"1.0.1\" || this.wpsclient.single == true)\n                        RegWebNotify(clientType, name, this.wpsclient.onMessage)\n                    return;\n                }\n                var jsonObj = JSON.parse(res.response);\n                if (this.wpsclient.clientId == \"\") {\n                    this.wpsclient.clientId = jsonObj.clientId;\n                }\n                // fix 新版本客户端使用旧版sdk的时候，会出现版本号判断问题\n                if (serverVersion!== \"\" && serverVersion !== \"wait\") {\n                    res.response = JSON.stringify(jsonObj.data);\n                }\n                else {\n                    res.response = decode(jsonObj.data);\n                }\n                if (callBack) {\n                    callBack(res);\n                }\n                this.wpsclient.RegWebNotify(name);\n            }\n            var paramEx = {\n                jsPluginsXml: this.jsPluginsXml,\n                showToFront: false,\n                param: { status: \"InitInSilentMode\" }\n            }\n            this.silentMode = true;\n            this.initWpsClient({\n                name: name,\n                func: \"\",\n                param: paramEx,\n                urlBase: GetUrlBase(),\n                callBack: initCallback,\n                timeout: timeout,\n                startparam: startparam,\n            })\n        }\n\n        /**\n         * 显示客户端到最前面\n         * @param {string} name             必传参数，加载项名称\n         * @param {function({int, string})} [callBack]     回调函数\n         */\n        this.ShowToFront = function (name, callBack) {\n            if (serverVersion < \"1.0.1\") {\n                if (callBack) {\n                    callBack({\n                        status: 4,\n                        message: \"当前客户端不支持，请升级客户端\"\n                    });\n                    return;\n                }\n                return;\n            }\n            if (this.clientId == \"\") {\n                if (callBack) callBack({\n                    status: 3,\n                    message: \"没有静默启动客户端\"\n                });\n                return;\n            }\n            var paramEx = {\n                jsPluginsXml: \"\",\n                showToFront: true,\n                param: { status: \"ShowToFront\" }\n            }\n            this.initWpsClient({\n                name: name,\n                func: \"\",\n                param: paramEx,\n                urlBase: GetUrlBase(),\n                callBack: callBack\n            })\n        }\n\n        /**\n         * 关闭未显示出来的静默启动客户端\n         * @param {string} name             必传参数，加载项名称\n         * @param {function({int, string})} [callBack]     回调函数\n         */\n        this.CloseSilentClient = function (name, callBack) {\n            if (serverVersion < \"1.0.1\") {\n                if (callBack) {\n                    callBack({\n                        status: 4,\n                        message: \"当前客户端不支持，请升级客户端\"\n                    });\n                    return;\n                }\n                return;\n            }\n            if (this.clientId == \"\") {\n                if (callBack) callBack({\n                    status: 3,\n                    message: \"没有静默启动客户端\"\n                });\n                return;\n            }\n            var paramEx = {\n                jsPluginsXml: \"\",\n                showToFront: false,\n                param: undefined\n            }\n            var func;\n            if (this.clientType == \"wps\")\n                func = \"wps.WpsApplication().Quit\"\n            else if (this.clientType == \"et\")\n                func = \"wps.EtApplication().Quit\"\n            else if (this.clientType == \"wpp\")\n                func = \"wps.WppApplication().Quit\"\n\n            function closeSilentClient(res) {\n                if (res.status == 0)\n                    this.wpsclient.clientId = \"\"\n                if (callBack) callBack(res);\n                return;\n            }\n            this.initWpsClient({\n                name: name,\n                func: func,\n                param: paramEx,\n                urlBase: GetUrlBase(),\n                callBack: closeSilentClient\n            })\n        }\n\n        /**\n         * 当前客户端是否在运行，使用WpsClient.IsClientRunning()进行调用\n         * @param {function({int, string})} [callBack]      回调函数，\"Client is running.\" 客户端正在运行\n         *                                                  \"Client is not running.\" 客户端没有运行\n         */\n        this.IsClientRunning = function (callBack) {\n            if (serverVersion < \"1.0.1\") {\n                if (callBack) {\n                    callBack({\n                        status: 4,\n                        message: \"当前客户端不支持，请升级客户端\"\n                    });\n                    return;\n                }\n                return;\n            }\n            IsClientRunning(this.clientType, callBack, this)\n        }\n    }\n\n    /**\n     * 初始化sdk，用来减少在服务进程启动时自定义协议弹框出现的次数\n     */\n    var g_isSdkInited = false;\n    function InitSdk(bMultiUser) {\n        g_isSdkInited = false;\n        var url = GetUrlBase() + \"/version\";\n        startWps({\n            url: url,\n            sendData: JSON.stringify({ serverId: serverId }),\n            callBack: function (res) {\n                if ((!serverId && !bMultiUser) || bMultiUser)\n                    g_isSdkInited = true;\n                if (res.status !== 0 && res.message !== \"Subserver not available.\") {\n                    serverVersion = \"wait\"\n                    return;\n                }\n                if (res.response && serverVersion == \"wait\"){\n                    serverVersion = res.response;\n                    sessionStorage.setItem('serverVersion', serverVersion);\n                }\n                    \n            },\n            tryCount: 1,\n            bPop: false,\n            concurrent: true,\n            timeout: 1000\n        });\n    }\n    InitSdk(false);\n\n    function GetVersion(callBack) {\n        var url = GetUrlBase() + \"/version\";\n        startWps({\n            url: url,\n            data: \"\",\n            callBack: function (res) {\n                callBack && callBack(res);\n                if (res.status !== 0 && res.message !== \"Subserver not available.\") {\n                    serverVersion = \"wait\"\n                    return;\n                }\n                if (res.response && serverVersion == \"wait\"){\n                    serverVersion = res.response;\n                    sessionStorage.setItem('serverVersion', serverVersion);\n                }\n            },\n            tryCount: 4,\n            bPop: true,\n            timeout: 5000\n        });\n    }\n    if (typeof noGlobal === \"undefined\") {\n        window.WpsInvoke = WpsInvoke;\n        window.WpsClient = WpsClient;\n        window.WebNotifyUseTimeout = WebNotifyUseTimeout;\n        window.EnableMultiUser = EnableMultiUser;\n    }\n\n    /**\n     * 当前客户端是否在运行，使用WpsInvoke.IsClientRunning()进行调用\n     * @param {string} clientType       加载项类型\n     * @param {function} [callBack]      回调函数，\"Client is running.\" 客户端正在运行\n     *                                   \"Client is not running.\" 客户端没有运行\n     */\n    function IsClientRunning(clientType, callBack, wpsclient) {\n        var url = GetUrlBase() + \"/isRunning\";\n        var wrapper = {\n            id: wpsclient == undefined ? undefined : wpsclient.clientId,\n            app: clientType,\n            serverId: serverId\n        }\n        wrapper = JSON.stringify(wrapper);\n        startWps({\n            url: url,\n            sendData: wrapper,\n            callBack: callBack,\n            tryCount: 1,\n            bPop: false,\n            timeout: 2000,\n            concurrent: true,\n            wpsclient: wpsclient\n        });\n    }\n\n    /**\n     * 获取publish.xml的内容\n     * @param {*} callBack 回调函数\n     */\n    function WpsAddonGetAllConfigInner(callBack) {\n        var options = {\n            url: GetUrlBase() + \"/publishlist\",\n            type: \"POST\",\n            sendData: JSON.stringify({ serverId: serverId }),\n            callBack: callBack,\n            tryCount: 3,\n            bPop: true,\n            timeout: 5000,\n            concurrent: true,\n        }\n        startWps(options);\n    }\n\n    /**\n     * 先获取一下版本号\n     * @param {*} callBack 回调函数\n     */\n    function WpsAddonGetAllConfig(callBack) {\n        var options = {\n            callBack: callBack,\n            isPublish: true,\n            urlBase: GetUrlBase()\n        }\n        WpsStartWrapVersionInner(options);\n    }\n\n    /**\n     * 检查ribbon.xml文件是否有效\n     * @param {*} element   参数对象\n     * @param {*} callBack  回调函数\n     */\n    function WpsAddonVerifyStatus(element, callBack) {\n        var xmlReq = getHttpObj();\n        var offline = element.online === \"false\";\n        var url = offline ? element.url : element.url + \"ribbon.xml\";\n        xmlReq.open(\"POST\", GetUrlBase() + \"/redirect/runParams\");\n        xmlReq.onload = function (res) {\n            if (offline && !res.target.response.startsWith(\"7z\")) {\n                callBack({ status: 1, msg: \"不是有效的7z格式\" + url });\n            } else if (!offline && !res.target.response.startsWith(\"<customUI\")) {\n                callBack({ status: 1, msg: \"不是有效的ribbon.xml, \" + url })\n            } else {\n                callBack({ status: 0, msg: \"OK\" })\n            }\n        }\n        xmlReq.onerror = function (res) {\n            xmlReq.bTimeout = true;\n            callBack({ status: 2, msg: \"网页路径不可访问，如果是跨域问题，不影响使用\" + url })\n        }\n        xmlReq.ontimeout = function (res) {\n            xmlReq.bTimeout = true;\n            callBack({ status: 3, msg: \"访问超时\" + url })\n        }\n        if (IEVersion() < 10) {\n            xmlReq.onreadystatechange = function () {\n                if (xmlReq.readyState != 4)\n                    return;\n                if (xmlReq.bTimeout) {\n                    return;\n                }\n                if (xmlReq.status === 200)\n                    xmlReq.onload();\n                else\n                    xmlReq.onerror();\n            }\n        }\n        xmlReq.timeout = 5000;\n        var data = {\n            method: \"get\",\n            url: url,\n            data: \"\"\n        }\n        var sendData = FormatSendData(data)\n        xmlReq.send(sendData);\n    }\n\n    function WpsAddonVerifyStatusWebSocket(element, callBack){\n        var timer = null\n        var ws = getWebsocketObj();\n        var offline = element.online === \"false\";\n        var url = offline ? element.url : element.url + \"ribbon.xml\";\n        ws.connect(GetUrlBase() + \"/redirect/runParams\");\n        ws.onmessage = function (res) {\n            if(timer !== null) {\n                clearTimeout(timer);\n                timer = null;\n            };\n            if (offline && !res.data.startsWith(\"7z\")) {\n                callBack({ status: 1, msg: \"不是有效的7z格式\" + url });\n            } else if (!offline && !res.data.startsWith(\"<customUI\")) {\n                callBack({ status: 1, msg: \"不是有效的ribbon.xml, \" + url })\n            } else {\n                callBack({ status: 0, msg: \"OK\" })\n            }\n            ws.close();\n        }\n        ws.onerror = function () {\n            ws.bTimeout = true;\n            callBack({ status: 2, msg: \"网页路径不可访问，如果是跨域问题，不影响使用\" + url })\n        }\n        var data = {\n            method: \"get\",\n            url: url,\n            data: \"\"\n        }\n        var sendData = FormatSendData(data)\n        ws.onopen = function() {\n            ws.send(sendData);\n        }\n        timer = setTimeout(function() {\n            callBack({ status: 3, msg: \"访问超时\" + url });\n            timer = null;\n            ws.close();\n        }, 5000)\n    }\n\n    /**\n     * 部署加载项，包括启动enable / disable禁用 / disableall禁用所有\n     * @param {*} element   参数对象\n     * @param {*} cmd       具体操作，enable / disable / disableall\n     * @param {*} callBack  回调函数\n     */\n    function WpsAddonHandleEx(element, cmd, callBack) {\n        var data = FormatData(element, cmd);\n        startWps({\n            url: GetUrlBase() + \"/deployaddons/runParams\",\n            type: \"POST\",\n            sendData: data,\n            callBack: callBack,\n            tryCount: 3,\n            bPop: true,\n            timeout: 0,\n            concurrent: true\n        });\n    }\n\n    /**\n     * 启用加载项\n     * @param {*} element   参数对象\n     * @param {*} callBack  回调函数\n     */\n    function WpsAddonEnable(element, callBack) {\n        WpsAddonHandleEx(element, \"enable\", callBack)\n    }\n\n    /**\n     * 禁用加载项\n     * @param {*} element   参数对象\n     * @param {*} callBack  回调函数\n     */\n    function WpsAddonDisable(element, callBack) {\n        WpsAddonHandleEx(element, \"disable\", callBack)\n    }\n\n    /**\n     * 禁用所有加载项\n     * @param {*} element \n     * @param {*} callBack \n     */\n    function WpsAddonDisableAll(element, callBack) {\n        WpsAddonHandleEx(element, \"disableall\", callBack)\n    }\n\n    /**\n     * 生成json格式的数据\n     * @param {*} element   参数对象\n     * @param {*} cmd       具体操作，enable / disable / disableall\n     * @returns base64编码后的数据\n     */\n    function FormatData(element, cmd) {\n        var data = {\n            \"cmd\": cmd, //\"enable\", 启用， \"disable\", 禁用, \"disableall\", 禁用所有\n            \"name\": element.name,\n            \"url\": element.url,\n            \"addonType\": element.addonType,\n            \"online\": element.online,\n            \"version\": element.version,\n            \"time\": new Date().getTime()\n        }\n        return FormatSendData(data);\n    }\n\n    /**\n     * 将json格式的数据字符串化，并进行base64编码\n     * @param {*} data  数据\n     * @returns base64编码后的数据\n     */\n    function FormatSendData(data) {\n        var strData = JSON.stringify(data);\n        if (IEVersion() < 10)\n            eval(\"strData = '\" + JSON.stringify(strData) + \"';\");\n\n        if (serverVersion >= \"1.0.2\" && serverId != undefined) {\n            var base64Data = encode(strData);\n            return JSON.stringify({\n                serverId: serverId,\n                data: base64Data\n            })\n        }\n        else {\n            return encode(strData);\n        }\n    }\n\n    var verifyStatus = function(){};\n    if(isReplaceWebSocket()) {\n        verifyStatus = WpsAddonVerifyStatusWebSocket\n    } else {\n        verifyStatus = WpsAddonVerifyStatus\n    }\n\n    //管理 WPS 加载项\n    var WpsAddonMgr = {\n        getAllConfig: WpsAddonGetAllConfig,\n        verifyStatus: verifyStatus,\n        enable: WpsAddonEnable,\n        disable: WpsAddonDisable,\n        disableall: WpsAddonDisableAll\n    }\n\n    if (typeof noGlobal === \"undefined\") {\n        window.WpsAddonMgr = WpsAddonMgr;\n    }\n    return { WpsInvoke: WpsInvoke, WpsClient: WpsClient, WebNotifyUseTimeout: WebNotifyUseTimeout, EnableMultiUser: EnableMultiUser, WpsAddonMgr: WpsAddonMgr, version: \"1.0.33\" };\n});\n\n/**\n * 改动时间：2022-11-28 19:06\n * 改动说明：1、调整心跳触发时机，确认云服务版本号后才触发\n *          2、轮询客户端消息赋予businessId调整至请求发送前。避免心跳没创建的异常情况\n * 改动影响：http&ws下，心跳触发是否正常\n */"]}