“我们让客户把客户端的地址输入页面做为配置项,然后在页面上就可以直接打开这个地址对应的客户端进行操作。”
1、文件选择方式实现
通过实现上传点击选择文件时类似的效果,让客户选择客户端后,我拿到这个文件路径后通过createObjectURL生成url,通过a标签打开不就OK了?
搞起...
那我怎么拿到这个路径呢?FileList对象涩,大佬们说可以通过value属性可以调用到,嘻嘻嘻...
怎么老是'C:\fakepath\xxxx'?
"出于明显的安全原因,源文件的实际路径没有显示在 input 的 value 属性中。相反,显示了文件名,并用 'C:\fakepath' 附加在路径的开头"
......
换方案还不行么?
2、URL Protocol实现web网页调用本地应用程序
查如何在浏览器打开本地应用。(多吉搜索啥时候恢复啊...)
“在web网页中调用本地应用程序的思路是要操作注册表。先在注册表注册一个自定义的URL Protocol协议,再利用URL Protocol实现web网页调用本地应用程序。”
可是我们客户端是开源软件啊,还是免安装的压缩文件。客户端放置位置未知,写死.reg注册表里的地址不行。
......
换个思路...
难道就不能直接通过方法调用本地程序?bing中...
3、ActiveXObject对象实现
ActiveXObject好像可以啊...
哦豁...基于安全方面考虑...
ie早期支持的方法,ie8以后都不支持了,其他浏览器也不支持了
4、后端方案
老王,这个前端不好搞啊,后端有没有办法解决?
后台研究完了,前端你会jsp么?我们可以将把启动相关配置写入jar包,前端通过jsp调用...巴拉巴拉...
哦,jsp不大会啊。改过几个jsp项目,自己要弄一个jsp环境还要嵌入到vue项目,这有点复杂了,时间成本有点高,但是也算个方案,后续其他方案不行再考虑吧。
那你自己再想办法看看。
5、直接打开bat
bat启动的客户端,有没有办法打开bat呢,分析了好久,发现和最开始打开路径一样,没有法。
6、借鉴腾讯qq推广
以前有搞过腾讯推广,那么腾讯是怎么实现在页面上调用到本地qq的呢。
腾讯应该也是通过注册表唤醒的,但他是怎么知道本地程序的注册表地址?也是自定义URL Protocol协议?是安装的时候就写入了注册表,然后网页上打开? 那我也可以考虑在客户端下载前把注册表注入嘛。(后续解决完后技术review,腾讯应该也是,但是因为有个跳转,所以代码审查找不到)
7、打包安装程序 + URL Protocol实现web网页调用本地应用程序
我是否能把这个整个客户端打包成exe然后写入注册表呢。
查了下资料,因为后台是java,查找java项目打包,通过eclipse导出jar包,exe4j打包成exe,再用inno setup打包成安装程序就可以了,而且可以在inno setup打包成安装程序过程中可以写入自定义注册表信息。
完美。
实际操作下来,通过inno setup默认自带的exe,实现了加入自定义URL Protocol协议,并在浏览器打开本地安装的程序。
但是发现,问题是这个客户端不是jar包,是一个类似于绿色免安装程序的东西,不能用eclipse导出jar包啊...就没法打成exe,虽然inno setup可以写入注册表,但我需要exe才能打包成安装软件。
问了下后端,也没法打包jar包。
找了好久的资料,比如压缩软件压缩成exe,本质只是解压,虽然需求实现了,但在安装完后通过图标启动每次都是解压文件的操作。
又找其他的,比如exe生成工具,安装完后没法通过安装图标启动,点击无反应。
8、通过bat转exe打包安装程序 + URL Protocol实现web网页调用本地应用程序
先上软件工具:
bat转exe(Bat_To_Exe_Converter)和exe打包安装程序(inno setup)
链接:pan.baidu.com/s/1U1tFIkgt… 提取码:0onp
如何使用:
bat转exe: blog.csdn.net/qq_20473985…
exe打包安装程序: blog.csdn.net/hebbely/art…
从上面的方法汇总,最后想到,那我能不能把bat文件打包成exe呢,因为它可以启动客户端。
但如何把其他文件打入exe呢,刚好inno setup打包可以选择加入其他文件。
借签这里:www.zhihu.com/question/28…
在打包选项完成后生成的代码里添加URL Protocol协议写入注册表,然后就可以在浏览器实现功能了。
这里刚好提一下,在页面上我们往往会判断这个应用是不可以打开,用到的是protocolcheck.js,可以借鉴下:www.jianshu.com/p/92ae1025e… ,但是这个js是不用依赖jquery的,可以直接引入, 然后通过vue传入原生event对象进行操作。
至此,需求基本实现,而且比原需求更加人性化,不用选择路径配置,只需要下载安装就可以打开了。
总结:从技术上讲,从浏览器安全策略上考虑的的方案基本黄了;本次的方案只考虑了windows,macos还没实现;在其他方案走不下去的话,我们还可以考虑jsp的方式继续走下去;还有打包jar的方案,前端不太了解,后端可以研究下。最后看起来,过程并不麻烦,但是做为前端,在那种四顾茫然的问题情景,在陌生的技术环境需求实现,花费的时间和精力都是很大的,对自己是一种挑战,也是一种成就,人生亦如此,加油。