浏览器打开exe程序

 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>

    


 

### 关于浏览器打开 EXE 程序时出现 `about:blank#blocked` 的问题 当用户尝试通过浏览器启动外部应用程序(例如 `.exe` 文件)时,现代浏览器出于安全性和用户体验考虑,默认会阻止此类操作。这种行为通常表现为页面跳转至 `about:blank#blocked` 或类似的错误提示。 以下是针对该问题的分析以及可能的解决方案: #### 1. **理解问题根源** 浏览器的安全策略旨在保护用户免受恶意软件侵害。如果脚本试图通过 `window.location` 或其他方式触发本地文件执行,则会被视为潜在威胁并自动阻断。这一机制由浏览器自身的沙盒环境决定[^1]。 #### 2. **调整浏览器设置** 某些情况下可以通过修改浏览器配置来允许特定站点运行此类功能。然而需要注意的是,这可能会降低系统的安全性。具体方法如下: - 对于 Chrome 用户,可以尝试启用实验性标志 `chrome://flags/#allow-insecure-localhost` 并重启浏览器。 - Internet Explorer 和 Edge Legacy 可能支持 ActiveX 控件或标记为可信站点的方式绕过限制,但这并不推荐用于生产环境[^4]。 #### 3. **利用协议关联替代直接路径** 一种更可靠的方法是注册自定义 URI 协议处理器并与目标应用绑定。例如创建名为 `myapp:` 的协议并通过操作系统级设定指向对应可执行文件的位置。随后网页只需提供超链接 `<a href="myapp:someparameters">Launch App</a>` 即可完成调用而无需担心被屏蔽[^3]。 #### 4. **服务器端配合下载分发** 对于需要频繁更新或者动态生成的应用场景来说,让客户端从远程获取最新版本再保存到本地后再双击开启可能是另一个可行的选择。这种方式规避了即时加载的风险同时也便于维护管理[^2]。 ```javascript // 示例代码展示如何监听右键事件并修正链接地址 document.addEventListener("contextmenu", (event) => { const location = window.location.href.split('#/')[0] + '#/' + event.target.title; event.toElement.href = location; // 更新实际跳转会使用的URL }); ``` 上述片段展示了如何捕获鼠标右键单击动作进而调整最终导向的目的地以适应特殊需求下的导航逻辑调整[^3]。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值