js通过注册表打开exe程序
html页面
<a id="zh" class="link" href="AlterID://"><img src="img/2.jpg"/>打开</a>
注册表文件
新建文本文件,修改为注册表name.reg文件,文件名随便写,文件由鼠标右键的形式编辑项打开编写
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\注册表名称]
@="URL:注册表名称 Protocol Handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\注册表名称\DefaultIcon]
@="E:\\QQ\\qq.exe"
[HKEY_CLASSES_ROOT\注册表名称\shell]
[HKEY_CLASSES_ROOT\注册表名称\shell\open]
[HKEY_CLASSES_ROOT\注册表名称\shell\open\command]
@="\"E:\\QQ\\qq.exe\" \"%1\""
1. 修改注册表名称(随便起)
2. 修改exe程序文件路径,文件路径以\\隔开
判断是否有注册表文件
思路:由浏览器失去焦点事件判断是否有注册表,因为如果有注册表的话,会打开exe程序,从而浏览器会失去焦点,反之没有注册表(这个方法有很大的问题,因为如果没有exe程序的话,他也打不开程序,所以他也会判断成为没有注册表,但是也没有什么好的办法)
如果没有注册表的话,在服务器上写好注册表文件,通过下面的链接触发下载事件
通过a标签下载:
<a id="a1" download='protocal.reg' href="http://localhost/protocal.reg" style="display: none;"></a>
JavaScript:
<script>
var links = document.getElementsByClassName('link')
var readyToBlur = false
var hasPlugin = null
var timeout = 3000
window.addEventListener('blur', function () {
if (readyToBlur) {
hasPlugin = true
}
})
for (var i = 0; i < links.length; i++) {
(function (id, win) {
links[id].addEventListener('click', function () {
readyToBlur = true
hasPlugin = false
window.location.href = links[id].getAttribute('data-link')
var t = setTimeout(function () {
win.readyToBlur = false
!hasPlugin && onHasNoPlugin(links[id].id)
clearTimeout(t)
}, timeout)
})
})(i, window)
}
function onHasNoPlugin(pluginName) {
// console.log(pluginName);
//这是个弹出框,我使用的是layui的弹出框
layui.use("layer",function(){
layer.confirm('缺少路径文件,是否下载', {
btn: ['确定','取消'] //按钮
}, function(){
layer.close(layer.index);
//通过js控制a链接,从而触发下载
var el=document.getElementById('a1');
el.target = '_new'; //指定在新窗口打开
el.click();//触发打开事件
});
});
}
</script>