我可以从 Web 应用程序打开 Windows 资源管理器窗口吗?

Can I open a Windows Explorer window from a web app?

本文关键字:资源管理器 窗口 Windows Web 应用程序 我可以      更新时间:2023-09-26

我为我的一个客户构建了一个CRM,现在他们要求一个有趣的功能:

对于每个客户记录,他们在本地计算机上都有一个匹配的文件目录。他们希望能够直接从 Web 应用程序中在 Windows 资源管理器中打开该文件夹(应用程序不需要访问目录/文件;它只需要启动 Windows 资源管理器,以便用户可以与其文件进行交互(。

这显然是不可能的,在浏览器中运行的常规JavaScript(谢天谢地(。我认为可能有一些方法可以通过为此目的构建Chrome扩展来实现这一点,但是似乎Chrome扩展程序/应用程序只能访问沙盒文件系统,这根本无法满足我的需求。构建NPAPI插件是不可能的,因为Chrome正在停止对NPAPI的支持。

文件 URI 也不能解决此问题。他们的显示很丑陋,没有拖放,没有大图标/缩略图,没有排序等。他们想要Windows资源管理器的全部功能。


我想到的唯一可行的选择是创建一个本地节点.js服务器,向该服务器发出本地主机 CORS 请求,然后从节点运行exec命令。

有什么更好的主意吗?

一种可能性是向用户的操作系统注册自定义 URI 协议处理程序,然后您的网页可以包含使用自定义协议的链接,例如openfolder://c/path/to/folder 这种自定义可能在实践中最常见于itunes://链接。

快速的谷歌搜索将我带到了这个看起来不错的教程:https://support.shotgunsoftware.com/hc/en-us/articles/200213756-How-to-launch-external-applications-using-custom-protocols-rock-instead-of-http-

缺点是用户必须运行某种小型安装程序才能设置正确的注册表项(或其他操作系统的非Windows等效项(并将一个小脚本放在磁盘上。不过,这将比运行您提议的节点.js服务器轻得多。

链接的教程使用 Python 脚本,但即使这样也可能是多余的,以满足您的需求。批处理文件可能就足够了。

编辑:另外一点,请注意实现这样的自定义处理程序的安全隐患。任何浏览器中的任何网页都可能利用您的自定义协议,攻击者将能够将任意数据传递给您的脚本。您应该采取措施确保脚本不会意外执行可能由恶意网页注入的任意命令,并且它只会打开一个文件夹,而不会打开其他任何内容。

这将要求每个客户运行一个节点.js服务器,这在您的情况下似乎不切实际。

可以使用文件 URI。

默认情况下,浏览器将拒绝打开它们。但是,正如本答案中所建议的,您可以要求您的客户安装本地链接。