设为首页 收藏本站
查看: 1279|回复: 0

[经验分享] Windows和Mac浏览器启动本地程序

[复制链接]

尚未签到

发表于 2017-7-7 11:46:18 | 显示全部楼层 |阅读模式
  前言
  这几天有个需求,需要在IE上启动本地程序,就如下面一样。
DSC0000.png

  一开始,我还以为IE有提供特殊的接口,类似上图中的“RunExe”,可以找了大半天觉得不对经(找不到该方法)。
  后来想想不对,这种方式是ActiveX控件。
  ActiveX控件基本概念




  ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。


ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动态库共存的文件,然后注册ocx文件。  ActiveX控件是基于com标准,使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序,此外ActiveX一般具有界面。
  PS:使用ActiveX需要设置IE的安全级别,Internet选项-->安全-->自定义级别--> 对没有标记为安全的ActiveX控件进行初始化和脚本运行—>启用。
  结论
  所以就如启动QQ、迅雷,根本就不是用ActiveX控件,严格上讲,ActiveX控件已经是实现业务逻辑的可视化界面(类似Chrome的拓展程序),所以这种方式被抛弃,因为我是要启动本地一个程序,而不是一个“插件”。
  自定义协议
  就如果迅雷和QQ,可以用类似tencent://message,直接在页面启动程序。
  做法:
  Windows:在注册表添加一个新的key以及相关的value到HKEY_CLASSES_ROOT中,来使应用程序可以处理特殊的URL协议。


Mac:注册URL Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。

实现:

Windows

1.把以下内容记在文本中,并重命名为xxx.reg,双击运行。




Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\BingoLink]
@="URL:BingoLink Protocol"
"URL Protocol"="C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe"

[HKEY_CLASSES_ROOT\BingoLink\DefaultIcon]
@="C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe,1"

[HKEY_CLASSES_ROOT\BingoLink\shell]
@="open"

[HKEY_CLASSES_ROOT\BingoLink\shell\open]
@="open"

[HKEY_CLASSES_ROOT\BingoLink\shell\open\command]
@="\"C:\\Program Files (x86)\\BingoSoft\\BingoLink\\BingoLink.exe\" \"%1\""

PS:当然真正做时,这些注册表信息是需要在安装过程中添加的,而不是像我后面加。

2.测试例子




<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body >
<a href="BingoLink://login?loginticket=11223344">点击这里启动程序</a>
</body>
</html>

Mac

由于Mac的原生桌面程序我并没涉猎,但是查看QQ的info.plist,也知道是注册URL Scheme。

DSC0001.png

优点:

1.各种浏览器都支持,mac和windows都可以做。

2. 不会有安全性问题。  附录
  1.js启动本地程序。



var wsh = new ActiveXObject("WScript.shell");
var path = wsh.RegRead("HKEY_CLASSES_ROOT\\BingoLink\\URL Protocol")  + " --sign=11223344";
wsh.exec(path); //用run是不行的
  参考文献
  1.http://blog.csdn.net/qq_25867649/article/details/52189412 【ActiveX控件】
  2.http://blog.csdn.net/jackychen_king/article/details/7743811 【通过自定义URL协议在Web中启动本地应用程序】
  3.http://cocoa.venj.me/blog/custom-url-scheme-on-mac-and-ios/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-391201-1-1.html 上篇帖子: Mac OSX中的@executable_path, @load_path和@rpath的理解 下篇帖子: Mac和Linux系统的:Arp欺骗源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表