如何使用HTML/JS实现点击图标唤起系统文件资源管理器访问C盘
问题背景
我目前正在开发一个模拟Windows 10任务栏效果的项目,可查看原问题附件的效果图。
当前已实现效果:给Chrome对应的img标签添加了onclick="chrome()"属性,对应JS代码如下:
function chrome() { window.open("https://www.google.com", "", "width=580,height=820"); }
点击Chrome图标可以正常打开新窗口。
待解决问题
想要实现点击文件资源管理器图标时打开file:///C:/路径,使用上述window.open()方法没有生效,需要替代方案实现点击img标签后,在浏览器内打开本地路径或者外部唤起系统文件资源管理器。
解决方案
失效原因:浏览器的安全沙箱策略限制了普通网页直接访问file://协议的本地路径,也不允许未经授权唤起本地系统程序,避免恶意网页窃取用户本地文件或执行恶意操作,属于浏览器的正常安全拦截。
根据项目使用场景可选择对应方案:
场景1:仅个人本地使用的测试项目
- 方案一:修改浏览器启动参数解除限制(仅适合测试用,不要用该配置的浏览器访问公网网站)
以Chrome为例:右键Chrome快捷方式选择「属性」,在「目标」栏的原有路径末尾追加如下参数,保存后双击快捷方式启动浏览器即可:
配置完成后直接使用--allow-file-access-from-files --disable-web-security --user-data-dir="C:\ChromeDevTest"window.open('file:///C:/')即可在浏览器内打开C盘目录。 - 方案二:搭建本地文件服务(无需修改浏览器配置,更安全)
使用本地静态文件服务工具将C盘设为服务根目录,比如用Python执行命令:
启动后在网页内调用# Python 3 python -m http.server 8080 --directory C:\window.open('http://localhost:8080')即可访问C盘文件。
场景2:需要给其他用户使用的项目
- 纯网页场景无法实现该功能,属于浏览器的硬性安全限制,没有通用绕过方案。
- 可以将项目改为Electron框架开发的桌面应用,直接调用Electron内置API即可唤起系统资源管理器:
const { shell } = require('electron') // 点击事件触发时执行 shell.openPath('C:\\') - 内网场景下还可以使用自定义URL协议方案:提前在用户电脑上注册自定义协议(比如
myexplorer://),关联到本地打开资源管理器的脚本,网页内调用window.open('myexplorer://c/')即可唤起,缺点是需要提前为每台使用的设备做协议配置。
内容的提问来源于stack exchange,提问作者20-BCA-053 Jaison John
相关产品推荐
相关产品推荐

