如何在火狐Firefox中打开、编辑、保存金山 WPS Office?
历史背景
WPS Office是由金山自主研发的一款办公软件套装,具备办公软件最常用的文字、表格、演示等多种功能。后来随着SAAS模式的兴起,网页在线编辑文档也越来越流行,很多巨头公司都发布了在线Office服务,虽然这些服务在多人协作、跨平台等方面有优势,但是存在的问题也很多,比如桌面版Office就存在一些功能缺失:需要网络随时保持在线、不能保存桌面生成的文档、表格过大打开的时候卡死、多文档同时编辑板式不一致等,最关键的是在线Office服务很难整合到自己公司的OA、GRM、ERP中去,最好的办法还是需要在桌面Office基础上,通过技术手段让其流畅的运行在 Chrome、Firefox、Edge、360、Opera、QQ等主流版本浏览器中。
现有方案
1.浏览器插件方案
此方案只适用于IE浏览器,通过在网页中 直接运行ActiveX控件调用桌面Office软件的自动化接口来实现, 免费DsoFramer及点聚WebOffice控件都是基于此原理,另外一些收费的如: 重庆软航NTKO Office文档控件、北京卓正PageOffice、广州华尔太WebOffice控件也是基于此原理。2021年初随着Chrome 对 Flash Player PPAPI插件的支持,浏览器插件的方案就彻底失效了。
2.特定浏览器方案
一些公司为了降低开发成本,又想继续使用公司原有系统,被迫继续使用安全漏洞较多的低版本Chrome或者360等其他低版本浏览器,低版本浏览器的安全漏洞和BUG非常多,导致Office文档控件在此基础上行使用也困难重重。
3.外接程序方案
各浏览器禁用 NPAPI插件后,各个厂商纷纷使用浏览器外部协议来 启动独立的EXE外接程序,看起来问题得到了很好的解决,但是每次运行中用户端都会弹出对话框,让用户不胜其烦。用户体验极差,如果用户此时已经打开了文档,还非常容易引起文档异常,导致文件丢失等情况。
4.双核方案
通过 Chrome等浏览器上的扩展程序IETab来实现,此方案同样会有 ActiveX控件弹窗, 用户体验很差。
最终升级方案:
通过上述4个方案可以看出,如果想在主流浏览器及Firefox中打开、编辑、保存 WPS Office文档,核心点就在于独立于浏览器之外并且能很好兼容各浏览器。这个就是今天介绍的已经非常成熟的商业化产品—猿大师中间件。
猿大师中间件的微软WPS网页小程序如何解决的呢?
原理就是在网页中指定位置和大小,模拟实现一个内嵌到网页中显示的窗口,在这个窗口中再调用桌面Office软件的自动化接口实现doc、xls、ppt等文档的操作。
前端还必须可对这个窗口进行实时控制,而且窗口必须跟随浏览器的移动和缩放、网页滚动、标签页切换、关闭等操作进行自动联动。这个窗口的宿主进程同时提供Web Socket的服务端和JSON打包命令的解析执行模块,前端就可以通过Web Socket连接后发送JSON打包的控制命令实现控制此窗口的动作。此方案可以说是上述外接程序方案的升级版,关键差异在于此方案可实现内嵌Word、Excel、PowerPoint、WPS文字、WPS表格等程序窗口到网页指定区域运行的效果,而且抛弃了通过IE内核来加载ActiveX控件的方案,解决了用户体验差、加载缓慢和内存占用高的问题。另外启动这个外接程序是通过Web Socket连接实现的,也解决了每次启动都会弹提示的烦恼问题,还有就是提供了类似ActiveX控件的自动升级方案,可在网页中实现静默自动升级,并额外增加了调用验证机制确保外接程序的安全启动。
另外猿大师中间件的wps Office网页小程序提供了丰富的二次开发接口,对现有系统改动比较小的前提下, 请求启动IE控件小程序加载即可。
总结:
一个好的技术实施方案,首先是要满足客户的刚性需求,其次是尽量降低采购、开发、实施及维护的总成本,再次是要有良好的兼容性和稳定性,最后需尽量确保技术方案不能因为浏览器的升级而失效。本文基于当前最新的技术信息和实践经验,给大家提供了猿大师中间件搭配WPS Office网页小程序这样一个稳定可靠、体验好、兼容性佳的桌面WPS Office文档控件技术方案,尤其适合在内网处理复杂文档和数据量大的表格场景,以供大家技术选型参考。
猿大师官方网站:http://www.yuanmaster.com
原文地址:https://www.cnblogs.com/yuandashi/p/15102729.html
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
- WordPress评论滑动/拉链解锁myQaptcha代码版及部署方法
- 修改WordPress分类目录和页面链接以斜杠/结尾,附nginx对应的301跳转设置方法
- 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
- 解决Crayon Syntax Highlighter代码高亮与fancybox图片暗箱冲突问题
- 移动搜索SEO:网站移动适配之Meta标注、移动跳转终结篇
- http加速器Varnish的vcl配置小记(lnmp环境)
- 关于网站图标favicon.ico那点事儿,你造吗?
- 跨平台 ListView 性能优化
- 打造“微信小程序”组件化开发框架
- 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
- 美团大众点评 Hybrid 化建设
- Linux系统date命令无法修改或同步时间的解决办法
- Redex 初探与 Interdex:Andorid 冷启动优化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- rxjs interval和take的混合使用
- Android自定义控件实现带文本与数字的圆形进度条
- 云函数Python依赖包安装,应用启动超时问题排查
- Android Volley扩展实现支持进度条的文件上传功能
- Android自定义控件实现球赛比分条效果
- rxjs里concat operators的用法
- rxjs里merge operators的用法
- Android实现多参数文件和数据上传
- 解决pyPdf和pyPdf2在合并pdf时出现异常的问题
- rxjs里scan operators的用法
- rxjs里switchMap operators的用法
- rxjs里concatMap operators的用法
- rxjs里takeWhile operators的用法
- Python sql注入 过滤字符串的非法字符实例
- rxjs里combineLatest operators的用法