var _et = {} var pluginsMode = location.search.split("=")[1];//截取url中的参数值 var pluginType = WpsInvoke.ClientType.et//加载项类型wps,et,wpp var pluginName = "EtOAAssist";//加载项名称 var wpsClient = new WpsClient(pluginType);//初始化一个多进程对象,多进程时才需要 var clientStr = pluginName + pluginType + "ClientId" //单进程封装开始 /** * 此方法是根据wps_sdk.js做的调用方法封装 * 可参照此定义 * @param {*} funcs 这是在WPS加载项内部定义的方法,采用JSON格式(先方法名,再参数) * @param {*} front 控制着通过页面执行WPS加载项方法,WPS的界面是否在执行时在前台显示 * @param {*} jsPluginsXml 指定一个新的WPS加载项配置文件的地址,动态传递jsplugins.xml模式,例如:http://127.0.0.1:3888/jsplugins.xml * @param {*} isSilent 隐藏打开WPS,如果需要隐藏,那么需要传递front参数为false */ function _WpsInvoke(funcs, front, jsPluginsXml,isSilent) { var info = {}; info.funcs = funcs; if(isSilent){//隐藏启动时,front必须为false front=false; } /** * 下面函数为调起WPS,并且执行加载项WpsOAAssist中的函数dispatcher,该函数的参数为业务系统传递过去的info */ if (pluginsMode != 2) {//单进程 singleInvoke(info,front,jsPluginsXml,isSilent) } else {//多进程 multInvoke(info,front,jsPluginsXml,isSilent) } } //单进程 function singleInvoke(info,front,jsPluginsXml,isSilent){ WpsInvoke.InvokeAsHttp(pluginType, // 组件类型 pluginName, // 插件名,与wps客户端加载的加载的插件名对应 "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码 info, // 传递给插件的数据 function (result) { // 调用回调,status为0为成功,其他是错误 if (result.status) { if (result.status == 100) { WpsInvoke.AuthHttpesCert('请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。') return; } alert(result.message) } else { console.log(result.response) } }, front, jsPluginsXml, isSilent) /** * 接受WPS加载项发送的消息 * 接收消息:WpsInvoke.RegWebNotify(type,name,callback) * WPS客户端返回消息: wps.OAAssist.WebNotify(message) * @param {*} type 加载项对应的插件类型 * @param {*} name 加载项对应的名字 * @param {func} callback 接收到WPS客户端的消息后的回调函数,参数为接受到的数据 */ WpsInvoke.RegWebNotify(pluginType, pluginName, handleOaMessage) } //多进程 function multInvoke(info,front,jsPluginsXml,isSilent){ wpsClient.jsPluginsXml = jsPluginsXml ? jsPluginsXml : "https://127.0.0.1:3888/jsplugins.xml"; if (localStorage.getItem(clientStr)) { wpsClient.clientId = localStorage.getItem(clientStr) } if(isSilent){ wpsClient.StartWpsInSilentMode(pluginName,function(){//隐藏启动后的回调函数 mult(info,front) }) }else{ mult(info,front) } wpsClient.onMessage = handleOaMessage } //多进程二次封装 function mult(info,front){ wpsClient.InvokeAsHttp( pluginName, // 插件名,与wps客户端加载的加载的插件名对应 "dispatcher", // 插件方法入口,与wps客户端加载的加载的插件代码对应,详细见插件代码 info, // 传递给插件的数据         function (result) { // 调用回调,status为0为成功,其他是错误 if (wpsClient.clientId) { localStorage.setItem(clientStr, wpsClient.clientId) } if (result.status !== 0) { console.log(result) if (result.message == '{\"data\": \"Failed to send message to WPS.\"}') { wpsClient.IsClientRunning(function (status) { console.log(status) if (status.response == "Client is running.") alert("任务发送失败,WPS 正在执行其他任务,请前往WPS完成当前任务") else { wpsClient.clientId = ""; wpsClient.notifyRegsitered = false; localStorage.setItem(clientStr, "") mult(info) } }) return; } else if (result.status == 100) { // WpsInvoke.AuthHttpesCert('请在稍后打开的网页中,点击"高级" => "继续前往",完成授权。') return; } alert(result.message) } else { console.log(result.response) } }, front) } function handleOaMessage(data) { console.log(data) } function GetUploadPath() { var url = document.location.host; return document.location.protocol + "//" + url + "/Upload"; } function GetDemoPath(fileName) { var url = document.location.host; return document.location.protocol + "//" + url + "/file/" + fileName; } function newDoc() { _WpsInvoke([{ "OpenDoc": { showButton: "btnSaveFile;btnSaveAsLocal" } }]) } _et['newDoc'] = { action: newDoc, code: _WpsInvoke.toString() + "\n\n" + newDoc.toString(), detail: "\n\ 说明:\n\ 点击按钮,打开表格组件后,新建一个空白表格文档\n\ \n\ 方法使用:\n\ 页面点击按钮,通过wps客户端协议来启动表格组件,调用oaassist插件,执行插件中的js函数OpenDoc,不带文档路径则默认新建一个空白表格文档\n\ funcs参数说明:\n\ OpenDoc方法对应于OA助手dispatcher支持的方法名\n\ showButton 要显示的按钮\n\ " } function openDoc() { var filePath = prompt("请输入打开文件路径(本地或是url):", GetDemoPath("样章.xlsx")) var uploadPath = prompt("请输入文档上传接口:", GetUploadPath()) _WpsInvoke([{ "OpenDoc": { "docId": "123", // 文档ID "uploadPath": uploadPath, // 保存文档上传接口 "fileName": filePath, showButton: "btnSaveFile;btnSaveAsLocal" } }]) } _et['openDoc'] = { action: openDoc, code: _WpsInvoke.toString() + "\n\n" + openDoc.toString(), detail: "\n\ 说明:\n\ 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\ 打开表格组件后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\ \n\ 方法使用:\n\ 页面点击按钮,通过wps客户端协议来启动表格组件,调用oaassist插件,执行传输数据中的指令\n\ funcs参数信息说明:\n\ OpenDoc方法对应于OA助手dispatcher支持的方法名\n\ docId 文档ID,OA助手用以标记文档的信息,以区分其他文档\n\ uploadPath 保存文档上传接口\n\ fileName 打开的文档路径\n\ showButton 要显示的按钮\n\ " } function onlineEditDoc() { var filePath = prompt("请输入打开文件路径(本地或是url):", GetDemoPath("样章.xlsx")) var uploadPath = prompt("请输入文档上传接口:", GetUploadPath()) _WpsInvoke([{ "OnlineEditDoc": { "docId": "123", // 文档ID "uploadPath": uploadPath, // 保存文档上传接口 "fileName": filePath, showButton: "btnSaveFile" } }]) } _et['onlineEditDoc'] = { action: onlineEditDoc, code: _WpsInvoke.toString() + "\n\n" + onlineEditDoc.toString(), detail: "\n\ 说明:\n\ 点击按钮,输入要打开的文档路径,输入文档上传接口,如果传的不是有效的服务端地址,将无法使用保存上传功能。\n\ 打开演示后,将根据文档路径下载并打开对应的文档,保存将自动上传指定服务器地址\n\ \n\ 方法使用:\n\ 页面点击按钮,通过wps客户端协议来启动演示组件,调用oaassist插件,执行传输数据中的指令\n\ funcs参数信息说明:\n\ OnlineEditDoc方法对应于OA助手dispatcher支持的方法名\n\ docId 文档ID,OA助手用以标记文档的信息,以区分其他文档\n\ uploadPath 保存文档上传接口\n\ fileName 打开的文档路径\n\ showButton 要显示的按钮\n\ " } window.onload = function () { var btns = document.getElementsByClassName("btn"); for (var i = 0; i < btns.length; i++) { btns[i].onclick = function (event) { document.getElementById("blockFunc").style.visibility = "visible"; var btn2 = document.getElementById("demoBtn"); btn2.innerText = this.innerText; document.getElementById("codeDes").innerText = _et[this.id].detail.toString(); document.getElementById("code").innerText = _et[this.id].code.toString(); document.getElementById("demoBtn").onclick = _et[this.id].action; hljs.highlightBlock(document.getElementById("code")); } } }