|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- var _wpp = {}
-
- var pluginsMode = location.search.split("=")[1];//截取url中的参数值
- var pluginType = WpsInvoke.ClientType.wpp//加载项类型wps,et,wpp
- var pluginName = "WppOAAssist";//加载项名称
- 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 GetDemoPath(fileName) {
-
- var url = document.location.host;
- return document.location.protocol + "//" + url + "/file/" + fileName;
- }
-
- function GetUploadPath() {
- var url = document.location.host;
- return document.location.protocol + "//" + url + "/Upload";
- }
-
- function newDoc() {
- _WpsInvoke([{
- "OpenDoc": {
- showButton: "btnSaveFile;btnSaveAsLocal"
- }
- }])
- }
-
- _wpp['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("样章.pptx"))
- var uploadPath = prompt("请输入文档上传接口:", GetUploadPath())
-
- _WpsInvoke([{
- "OpenDoc": {
- "docId": "123", // 文档ID
- "uploadPath": uploadPath, // 保存文档上传接口
- "fileName": filePath,
- showButton: "btnSaveFile;btnSaveAsLocal"
- }
- }])
- }
-
- _wpp['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("样章.pptx"))
- var uploadPath = prompt("请输入文档上传接口:", GetUploadPath())
-
- _WpsInvoke([{
- "OnlineEditDoc": {
- "docId": "123", // 文档ID
- "uploadPath": uploadPath, // 保存文档上传接口
- "fileName": filePath,
- showButton: "btnSaveFile;btnSaveAsLocal"
- }
- }])
- }
-
- _wpp['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 = _wpp[this.id].detail.toString()
- document.getElementById("code").innerText = _wpp[this.id].code.toString()
- document.getElementById("demoBtn").onclick = _wpp[this.id].action;
-
- hljs.highlightBlock(document.getElementById("code"));
- }
- }
- }
|