|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957 |
- (function (global, factory) {
-
- "use strict";
-
- if (typeof module === "object" && typeof module.exports === "object") {
- module.exports = factory(global, true);
- } else {
- factory(global);
- }
-
- })(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
-
- "use strict";
-
- var bFinished = true;
-
- function getHttpObj() {
- var httpobj = null;
- if (IEVersion() < 10) {
- try {
- httpobj = new XDomainRequest();
- } catch (e1) {
- httpobj = new createXHR();
- }
- } else {
- httpobj = new createXHR();
- }
- return httpobj;
- }
- //兼容IE低版本的创建xmlhttprequest对象的方法
- function createXHR() {
- if (typeof XMLHttpRequest != 'undefined') { //兼容高版本浏览器
- return new XMLHttpRequest();
- } else if (typeof ActiveXObject != 'undefined') { //IE6 采用 ActiveXObject, 兼容IE6
- var versions = [ //由于MSXML库有3个版本,因此都要考虑
- 'MSXML2.XMLHttp.6.0',
- 'MSXML2.XMLHttp.3.0',
- 'MSXML2.XMLHttp'
- ];
-
- for (var i = 0; i < versions.length; i++) {
- try {
- return new ActiveXObject(versions[i]);
- } catch (e) {
- //跳过
- }
- }
- } else {
- throw new Error('您的浏览器不支持XHR对象');
- }
- }
-
- function startWps(options) {
- if (!bFinished && !options.concurrent) {
- if (options.callback)
- options.callback({
- status: 1,
- message: "上一次请求没有完成"
- });
- return;
- }
- bFinished = false;
-
- function startWpsInnder(tryCount) {
- if (tryCount <= 0) {
- if (bFinished)
- return;
- bFinished = true;
- if (options.callback)
- options.callback({
- status: 2,
- message: "请允许浏览器打开WPS Office"
- });
- return;
- }
- var xmlReq = getHttpObj();
- //WPS客户端提供的接收参数的本地服务,HTTP服务端口为58890,HTTPS服务端口为58891
- //这俩配置,取一即可,不可同时启用
- xmlReq.open('POST', options.url);
- xmlReq.onload = function (res) {
- bFinished = true;
- if (options.callback) {
- options.callback({
- status: 0,
- response: IEVersion() < 10 ? xmlReq.responseText : res.target.response
- });
- }
- }
- xmlReq.ontimeout = xmlReq.onerror = function (res) {
- xmlReq.bTimeout = true;
- if (tryCount == options.tryCount && options.bPop) { //打开wps并传参
- window.location.href = "ksoWPSCloudSvr://start=RelayHttpServer" //是否启动wps弹框
- }
- setTimeout(function () {
- startWpsInnder(tryCount - 1)
- }, 1000);
- }
- if (IEVersion() < 10) {
- xmlReq.onreadystatechange = function () {
- if (xmlReq.readyState != 4)
- return;
- if (xmlReq.bTimeout) {
- return;
- }
- if (xmlReq.status === 200)
- xmlReq.onload();
- else
- xmlReq.onerror();
- }
- }
- xmlReq.timeout = options.timeout;
- xmlReq.send(options.sendData)
- }
- startWpsInnder(options.tryCount);
- return;
- }
-
- var fromCharCode = String.fromCharCode;
- // encoder stuff
- var cb_utob = function (c) {
- if (c.length < 2) {
- var cc = c.charCodeAt(0);
- return cc < 0x80 ? c :
- cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) +
- fromCharCode(0x80 | (cc & 0x3f))) :
- (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +
- fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +
- fromCharCode(0x80 | (cc & 0x3f)));
- } else {
- var cc = 0x10000 +
- (c.charCodeAt(0) - 0xD800) * 0x400 +
- (c.charCodeAt(1) - 0xDC00);
- return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) +
- fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) +
- fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +
- fromCharCode(0x80 | (cc & 0x3f)));
- }
- };
- var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
- var utob = function (u) {
- return u.replace(re_utob, cb_utob);
- };
- var _encode = function (u) {
- var isUint8Array = Object.prototype.toString.call(u) === '[object Uint8Array]';
- if (isUint8Array)
- return u.toString('base64')
- else
- return btoa(utob(String(u)));
- }
-
- if (typeof window.btoa !== 'function') window.btoa = func_btoa;
-
- function func_btoa(input) {
- var str = String(input);
- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- for (
- // initialize result and counter
- var block, charCode, idx = 0, map = chars, output = '';
- // if the next str index does not exist:
- // change the mapping table to "="
- // check if d has no fractional digits
- str.charAt(idx | 0) || (map = '=', idx % 1);
- // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
- output += map.charAt(63 & block >> 8 - idx % 1 * 8)
- ) {
- charCode = str.charCodeAt(idx += 3 / 4);
- if (charCode > 0xFF) {
- throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
- }
- block = block << 8 | charCode;
- }
- return output;
- }
-
- var encode = function (u, urisafe) {
- return !urisafe ?
- _encode(u) :
- _encode(String(u)).replace(/[+\/]/g, function (m0) {
- return m0 == '+' ? '-' : '_';
- }).replace(/=/g, '');
- };
-
- function IEVersion() {
- var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
- var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
- var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
- var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
- if (isIE) {
- var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
- reIE.test(userAgent);
- var fIEVersion = parseFloat(RegExp["$1"]);
- if (fIEVersion == 7) {
- return 7;
- } else if (fIEVersion == 8) {
- return 8;
- } else if (fIEVersion == 9) {
- return 9;
- } else if (fIEVersion == 10) {
- return 10;
- } else {
- return 6; //IE版本<=7
- }
- } else if (isEdge) {
- return 20; //edge
- } else if (isIE11) {
- return 11; //IE11
- } else {
- return 30; //不是ie浏览器
- }
- }
-
- function WpsStart(options) {
- var startInfo = {
- "name": options.name,
- "function": options.func,
- "info": options.param.param,
- "jsPluginsXml": options.param.jsPluginsXml
- };
- var strData = JSON.stringify(startInfo);
- if (IEVersion() < 10) {
- try {
- eval("strData = '" + JSON.stringify(startInfo) + "';");
- } catch (err) {
-
- }
- }
-
- var baseData = encode(strData);
- var url = options.urlBase + "/" + options.clientType + "/runParams";
- var data = "ksowebstartup" + options.clientType + "://" + baseData;
- startWps({
- url: url,
- sendData: data,
- callback: options.callback,
- tryCount: options.tryCount,
- bPop: options.bPop,
- timeout: 5000,
- concurrent: false,
- client: options.wpsclient
- });
- }
-
- function WpsStartWrap(options) {
- WpsStart({
- clientType: options.clientType,
- name: options.name,
- func: options.func,
- param: options.param,
- urlBase: options.urlBase,
- callback: options.callback,
- tryCount: 4,
- bPop: true,
- wpsclient: options.wpsclient,
- })
- }
-
- /**
- * 支持浏览器触发,WPS有返回值的启动
- *
- * @param {*} clientType 组件类型
- * @param {*} name WPS加载项名称
- * @param {*} func WPS加载项入口方法
- * @param {*} param 参数:包括WPS加载项内部定义的方法,参数等
- * @param {*} callback 回调函数
- * @param {*} tryCount 重试次数
- * @param {*} bPop 是否弹出浏览器提示对话框
- */
- var exId = 0;
- function WpsStartWrapExInner(options) {
- var infocontent = options.param.param;
- if (!options.wpsclient) {
- infocontent = JSON.stringify(options.param.param);
- var rspUrl = options.urlBase + "/transferEcho/runParams";
- var time = new Date();
- var cmdId = "js" + time.getTime() + "_" + exId;
- var funcEx = "var res = " + options.func;
- var cbCode = "var xhr = new XMLHttpRequest();xhr.open('POST', '" + rspUrl + "');xhr.send(JSON.stringify({id: '" + cmdId + "', response: res}));" //res 为func执行返回值
- var infoEx = infocontent + ");" + cbCode + "void(0";
- options.func = funcEx;
- infocontent = infoEx;
- }
- var startInfo = {
- "name": options.name,
- "function": options.func,
- "info": infocontent,
- "showToFront": options.param.showToFront,
- "jsPluginsXml": options.param.jsPluginsXml,
- };
-
- var strData = JSON.stringify(startInfo);
- if (IEVersion() < 10) {
- try {
- eval("strData = '" + JSON.stringify(startInfo) + "';");
- } catch (err) {
-
- }
- }
-
- var baseData = encode(strData);
- var wrapper;
-
- if (!options.wpsclient) {
- var url = options.urlBase + "/transfer/runParams";
- var data = "ksowebstartup" + options.clientType + "://" + baseData;
- wrapper = {
- id: cmdId,
- app: options.clientType,
- data: data
- };
- }
- else {
- var url = options.urlBase + "/transferEx/runParams";
- wrapper = {
- id: options.wpsclient.clientId,
- app: options.clientType,
- data: baseData,
- mode: options.wpsclient.silentMode ? "true" : "false"
- };
- }
- wrapper = JSON.stringify(wrapper);
- startWps({
- url: url,
- sendData: wrapper,
- callback: options.callback,
- tryCount: options.tryCount,
- bPop: options.bPop,
- timeout: 0,
- concurrent: options.concurrent,
- client: options.wpsclient
- });
- }
-
- var serverVersion = "wait"
- var cloudSvrStart = true;
- function WpsStartWrapVersionInner(options) {
- if (serverVersion == "wait") {
- if (cloudSvrStart == false) {
- window.location.href = "ksoWPSCloudSvr://start=RelayHttpServer" //是否启动wps弹框
- }
- startWps({
- url: options.urlBase + '/version',
- data: "",
- callback: function (res) {
- if (res.status !== 0) {
- options.callback(res)
- return;
- }
- serverVersion = res.response;
- cloudSvrStart = true;
- options.tryCount = 1
- options.bPop = false
- if (serverVersion === "") {
- WpsStart(options)
- } else if (serverVersion < "1.0.1" && options.wpsclient) {
- if (options.callback) {
- options.callback({
- status: 4,
- message: "当前客户端不支持,请升级客户端"
- })
- }
- } else {
- WpsStartWrapExInner(options);
- }
- },
- tryCount: 4,
- bPop: true,
- timeout: 5000,
- concurrent: options.concurrent
- });
- } else {
- if (serverVersion === "") {
- WpsStartWrap(options)
- } else if (serverVersion < "1.0.1" && options.wpsclient) {
- if (options.callback) {
- options.callback({
- status: 4,
- message: "当前客户端不支持,请升级客户端"
- })
- }
- } else {
- WpsStartWrapExInner(options);
- }
- }
- }
-
- var RegWebNotifyMap = { wps: {}, wpp: {}, et: {} }
- var bWebNotifyUseTimeout = true
- function WebNotifyUseTimeout(value) {
- bWebNotifyUseTimeout = value ? true : false
- }
- /**
- * 注册一个前端页面接收WPS传来消息的方法
- * @param {*} clientType wps | et | wpp
- * @param {*} name WPS加载项的名称
- * @param {*} callback 回调函数
- */
- function RegWebNotify(clientType, name, callback, wpsclient) {
- if (clientType != "wps" && clientType != "wpp" && clientType != "et")
- return;
- var paramStr = {}
- if (wpsclient) {
- if (wpsclient.notifyRegsitered == true) {
- return
- }
- wpsclient.notifyRegsitered = true;
- paramStr = {
- clientId: wpsclient.clientId,
- name: name,
- type: clientType
- }
- }
- else {
- if (typeof callback != 'function')
- return
- if (RegWebNotifyMap[clientType][name]) {
- RegWebNotifyMap[clientType][name] = callback;
- return
- }
- var RegWebNotifyID = new Date().valueOf() + ''
- paramStr = {
- id: RegWebNotifyID,
- name: name,
- type: clientType
- }
- RegWebNotifyMap[clientType][name] = callback
- }
-
- var askItem = function () {
- var xhr = getHttpObj()
- xhr.onload = function (e) {
- if (xhr.responseText == "WPSInnerMessage_quit") {
- return;
- }
- if (wpsclient) {
- wpsclient.OnRegWebNotify(xhr.responseText)
- } else {
- var func = RegWebNotifyMap[clientType][name]
- func(xhr.responseText)
- }
- window.setTimeout(askItem, 300)
- }
- xhr.onerror = function (e) {
- if (bWebNotifyUseTimeout)
- window.setTimeout(askItem, 1000)
- else
- window.setTimeout(askItem, 10000)
- }
- xhr.ontimeout = function (e) {
- if (bWebNotifyUseTimeout)
- window.setTimeout(askItem, 300)
- else
- window.setTimeout(askItem, 10000)
- }
- if (IEVersion() < 10) {
- xhr.onreadystatechange = function () {
- if (xhr.readyState != 4)
- return;
- if (xhr.bTimeout) {
- return;
- }
- if (xhr.status === 200)
- xhr.onload();
- else
- xhr.onerror();
- }
- }
- xhr.open('POST', GetUrlBase() + '/askwebnotify', true)
- if (bWebNotifyUseTimeout)
- xhr.timeout = 2000;
- xhr.send(JSON.stringify(paramStr))
- }
-
- window.setTimeout(askItem, 2000)
- }
-
- function GetUrlBase() {
- if (location.protocol == "http:")
- return "http://127.0.0.1:58890"
- return "https://127.0.0.1:58891"
- }
-
- function WpsStartWrapVersion(clientType, name, func, param, callback, showToFront, jsPluginsXml) {
- var paramEx = {
- jsPluginsXml: jsPluginsXml ? jsPluginsXml : "",
- showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,
- param: (typeof (param) == 'object' ? param : JSON.parse(param))
- }
- var options = {
- clientType: clientType,
- name: name,
- func: func,
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: callback,
- wpsclient: undefined,
- concurrent: true
- }
- WpsStartWrapVersionInner(options);
- }
-
- //从外部浏览器远程调用 WPS 加载项中的方法
- var WpsInvoke = {
- InvokeAsHttp: WpsStartWrapVersion,
- InvokeAsHttps: WpsStartWrapVersion,
- RegWebNotify: RegWebNotify,
- ClientType: {
- wps: "wps",
- et: "et",
- wpp: "wpp"
- },
- CreateXHR: getHttpObj,
- IsClientRunning: IsClientRunning
- }
-
- window.wpsclients = [];
- /**
- * @constructor WpsClient wps客户端
- * @param {string} clientType 必传参数,加载项类型,有效值为"wps","wpp","et";分别表示文字,演示,电子表格
- */
- function WpsClient(clientType) {
- /**
- * 设置RegWebNotify的回调函数,加载项给业务端发消息通过该函数
- * @memberof WpsClient
- * @member onMessage
- */
- this.onMessage;
-
- /**
- * 设置加载项路径
- * @memberof WpsClient
- * @member jsPluginsXml
- */
- this.jsPluginsXml;
-
- /**
- * 内部成员,外部无需调用
- */
- this.notifyRegsitered = false;
- this.clientId = "";
- this.concurrent = false;
- this.clientType = clientType;
- this.firstRequest = true;
-
- /**
- * 内部函数,外部无需调用
- * @param {*} options
- */
- this.initWpsClient = function (options) {
- options.clientType = this.clientType
- options.wpsclient = this
- options.concurrent = this.firstRequest ? true : this.concurrent
- this.firstRequest = false;
- WpsStartWrapVersionInner(options)
- }
-
- /**
- * 以http启动
- * @param {string} name 加载项名称
- * @param {string} func 要调用的加载项中的函数行
- * @param {string} param 在加载项中执行函数func要传递的数据
- * @param {function({int, string})} callback 回调函数,status = 0 表示成功,失败请查看message信息
- * @param {bool} showToFront 设置wps是否显示到前面来
- * @return {string} "Failed to send message to WPS." 发送消息失败,客户端已关闭;
- * "WPS Addon is not response." 加载项阻塞,函数执行失败
- */
- this.InvokeAsHttp = function (name, func, param, callback, showToFront) {
- function clientCallback(res) {
- //this不是WpsClient
- if (res.status !== 0 || serverVersion < "1.0.1") {
- if (callback) callback(res);
- return;
- }
- var resObject = JSON.parse(res.response);
- if (this.client.clientId == "") {
- this.client.clientId = resObject.clientId;
- }
- this.client.concurrent = true;
- if (typeof resObject.data == "object")
- res.response = JSON.stringify(resObject.data);
- else
- res.response = resObject.data;
- if (IEVersion() < 10)
- eval(" res.response = '" + res.response + "';");
- if (callback)
- callback(res);
- this.client.RegWebNotify(name);
- }
- var paramEx = {
- jsPluginsXml: this.jsPluginsXml ? this.jsPluginsXml : "",
- showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,
- param: (typeof (param) == 'object' ? param : JSON.parse(param))
- }
- this.initWpsClient({
- name: name,
- func: func,
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: clientCallback
- })
- }
-
- /**
- * 以https启动
- * @param {string} name 加载项名称
- * @param {string} func 要调用的加载项中的函数行
- * @param {string} param 在加载项中执行函数func要传递的数据
- * @param {function({int, string})} callback 回调函数,status = 0 表示成功,失败请查看message信息
- * @param {bool} showToFront 设置wps是否显示到前面来
- */
- this.InvokeAsHttps = function (name, func, param, callback, showToFront) {
- var paramEx = {
- jsPluginsXml: this.jsPluginsXml ? this.jsPluginsXml : "",
- showToFront: typeof (showToFront) == 'boolean' ? showToFront : true,
- param: (typeof (param) == 'object' ? param : JSON.parse(param))
- }
- this.initWpsClient({
- name: name,
- func: func,
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: callback
- })
- }
-
- /**
- * 内部函数,外部无需调用
- * @param {*} name
- */
- this.RegWebNotify = function (name) {
- RegWebNotify(this.clientType, name, null, this);
- }
-
- this.OnRegWebNotify = function (message) {
- if (this.onMessage)
- this.onMessage(message)
- }
-
- /**
- * 以静默模式启动客户端
- * @param {string} name 必传参数,加载项名称
- * @param {function({int, string})} [callback] 回调函数,status = 0 表示成功,失败请查看message信息
- */
- this.StartWpsInSilentMode = function (name, callback) {
- function initCallback(res) {
- //this不是WpsClient
- if (res.status !== 0 || serverVersion < "1.0.1") {
- if (callback) callback(res);
- return;
- }
- if (this.client.clientId == "") {
- this.client.clientId = JSON.parse(res.response).clientId;
- window.wpsclients[window.wpsclients.length] = { name: name, client: this.client };
- }
- res.response = JSON.stringify(JSON.parse(res.response).data);
- this.client.concurrent = true;
- if (callback) {
- callback(res);
- }
- this.client.RegWebNotify(name);
- }
- var paramEx = {
- jsPluginsXml: this.jsPluginsXml,
- showToFront: false,
- param: { status: "InitInSilentMode" }
- }
- this.silentMode = true;
- this.initWpsClient({
- name: name,
- func: "",
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: initCallback
- })
- }
-
- /**
- * 显示客户端到最前面
- * @param {string} name 必传参数,加载项名称
- * @param {function({int, string})} [callback] 回调函数
- */
- this.ShowToFront = function (name, callback) {
- if (serverVersion < "1.0.1") {
- if (callback) {
- callback({
- status: 4,
- message: "当前客户端不支持,请升级客户端"
- });
- return;
- }
- return;
- }
- if (this.clientId == "") {
- if (callback) callback({
- status: 3,
- message: "没有静默启动客户端"
- });
- return;
- }
- var paramEx = {
- jsPluginsXml: "",
- showToFront: true,
- param: { status: "ShowToFront" }
- }
- this.initWpsClient({
- name: name,
- func: "",
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: callback
- })
- }
-
- /**
- * 关闭未显示出来的静默启动客户端
- * @param {string} name 必传参数,加载项名称
- * @param {function({int, string})} [callback] 回调函数
- */
- this.CloseSilentClient = function (name, callback) {
- if (serverVersion < "1.0.1") {
- if (callback) {
- callback({
- status: 4,
- message: "当前客户端不支持,请升级客户端"
- });
- return;
- }
- return;
- }
- if (this.clientId == "") {
- if (callback) callback({
- status: 3,
- message: "没有静默启动客户端"
- });
- return;
- }
- var paramEx = {
- jsPluginsXml: "",
- showToFront: false,
- param: undefined
- }
- var func;
- if (this.clientType == "wps")
- func = "wps.WpsApplication().Quit"
- else if (this.clientType == "et")
- func = "wps.EtApplication().Quit"
- else if (this.clientType == "wpp")
- func = "wps.WppApplication().Quit"
-
- function closeSilentClient(res) {
- if (res.status == 0)
- this.client.clientId = ""
- if (callback) callback(res);
- return;
- }
- this.initWpsClient({
- name: name,
- func: func,
- param: paramEx,
- urlBase: GetUrlBase(),
- callback: closeSilentClient
- })
- }
-
- /**
- * 当前客户端是否在运行,使用WpsClient.IsClientRunning()进行调用
- * @param {function({int, string})} [callback] 回调函数,"Client is running." 客户端正在运行
- * "Client is not running." 客户端没有运行
- */
- this.IsClientRunning = function (callback) {
- if (serverVersion < "1.0.1") {
- if (callback) {
- callback({
- status: 4,
- message: "当前客户端不支持,请升级客户端"
- });
- return;
- }
- return;
- }
- IsClientRunning(this.clientType, callback, this)
- }
- }
-
- function InitSdk() {
- var url = GetUrlBase() + "/version";
- startWps({
- url: url,
- data: "",
- callback: function (res) {
- if (res.status !== 0) {
- cloudSvrStart = false;
- return;
- }
- if (serverVersion == "wait") {
- serverVersion = res.response;
- cloudSvrStart = true;
- }
- },
- tryCount: 1,
- bPop: false,
- timeout: 5000
- });
- }
-
- if (typeof noGlobal === "undefined") {
- window.WpsInvoke = WpsInvoke;
- window.WpsClient = WpsClient;
- window.WebNotifyUseTimeout = WebNotifyUseTimeout;
- InitSdk();
- }
-
- /**
- * 当前客户端是否在运行,使用WpsInvoke.IsClientRunning()进行调用
- * @param {string} clientType 加载项类型
- * @param {function} [callback] 回调函数,"Client is running." 客户端正在运行
- * "Client is not running." 客户端没有运行
- */
- function IsClientRunning(clientType, callback, wpsclient) {
- var url = GetUrlBase() + "/isRunning";
- var wrapper = {
- id: wpsclient == undefined ? undefined : wpsclient.clientId,
- app: clientType
- }
- wrapper = JSON.stringify(wrapper);
- startWps({
- url: url,
- sendData: wrapper,
- callback: callback,
- tryCount: 1,
- bPop: false,
- timeout: 2000,
- concurrent: true,
- client: wpsclient
- });
- }
-
- function WpsAddonGetAllConfig(callBack) {
- var baseData;
- startWps({
- url: GetUrlBase() + "/publishlist",
- type: "GET",
- sendData: baseData,
- callback: callBack,
- tryCount: 3,
- bPop: true,
- timeout: 5000,
- concurrent: true
- });
- }
-
- function WpsAddonVerifyStatus(element, callBack) {
- var xmlReq = getHttpObj();
- var offline = element.online === "false";
- var url = offline ? element.url : element.url + "ribbon.xml";
- xmlReq.open("POST", GetUrlBase() + "/redirect/runParams");
- xmlReq.onload = function (res) {
- if (offline && !res.target.response.startsWith("7z")) {
- callBack({ status: 1, msg: "不是有效的7z格式" + url });
- } else if (!offline && !res.target.response.startsWith("<customUI")) {
- callBack({ status: 1, msg: "不是有效的ribbon.xml, " + url })
- } else {
- callBack({ status: 0, msg: "OK" })
- }
- }
- xmlReq.onerror = function (res) {
- xmlReq.bTimeout = true;
- callBack({ status: 2, msg: "网页路径不可访问,如果是跨域问题,不影响使用" + url })
- }
- xmlReq.ontimeout = function (res) {
- xmlReq.bTimeout = true;
- callBack({ status: 3, msg: "访问超时" + url })
- }
- if (IEVersion() < 10) {
- xmlReq.onreadystatechange = function () {
- if (xmlReq.readyState != 4)
- return;
- if (xmlReq.bTimeout) {
- return;
- }
- if (xmlReq.status === 200)
- xmlReq.onload();
- else
- xmlReq.onerror();
- }
- }
- xmlReq.timeout = 5000;
- var data = {
- method: "get",
- url: url,
- data: ""
- }
- var sendData = FormatSendData(data)
- xmlReq.send(sendData);
- }
-
- function WpsAddonHandleEx(element, cmd, callBack) {
- var data = FormatData(element, cmd);
- startWps({
- url: GetUrlBase() + "/deployaddons/runParams",
- type: "POST",
- sendData: data,
- callback: callBack,
- tryCount: 3,
- bPop: true,
- timeout: 5000,
- concurrent: true
- });
- }
-
- function WpsAddonEnable(element, callBack) {
- WpsAddonHandleEx(element, "enable", callBack)
- }
-
- function WpsAddonDisable(element, callBack) {
- WpsAddonHandleEx(element, "disable", callBack)
- }
-
- function FormatData(element, cmd) {
- var data = {
- "cmd": cmd, //"enable", 启用, "disable", 禁用, "disableall", 禁用所有
- "name": element.name,
- "url": element.url,
- "addonType": element.addonType,
- "online": element.online,
- "version": element.version
- }
- return FormatSendData(data);
- }
-
- function FormatSendData(data) {
- var strData = JSON.stringify(data);
- if (IEVersion() < 10)
- eval("strData = '" + JSON.stringify(strData) + "';");
- return encode(strData);
- }
-
- window.onbeforeunload = function () {
- for (var i = 0; i < window.wpsclients.length; ++i) {
- var item = window.wpsclients[i]
- item.client.CloseSilentClient(item.name)
- }
- }
-
- //管理 WPS 加载项
- var WpsAddonMgr = {
- getAllConfig: WpsAddonGetAllConfig,
- verifyStatus: WpsAddonVerifyStatus,
- enable: WpsAddonEnable,
- disable: WpsAddonDisable,
- }
-
- if (typeof noGlobal === "undefined") {
- window.WpsAddonMgr = WpsAddonMgr;
- }
-
- return { WpsInvoke: WpsInvoke, WpsAddonMgr: WpsAddonMgr, version: "1.0.12" };
- });
|