我能否从网页应用程序中打开一个Windows资源管理器窗口?

3
我为我的客户建了一个CRM,现在他们请求添加一个有趣的功能:对于每个客户记录,他们有一个匹配的文件目录,位于他们本地计算机上。他们想要能够直接从Web应用程序中打开Windows资源管理器,以便用户可以与他们的文件进行交互(应用程序不需要访问目录/文件,只需启动Windows资源管理器即可)。显然,这是不可能通过常规JavaScript在浏览器中实现的(谢天谢地)。我认为可以通过构建Chrome扩展程序来实现这一目的,但似乎Chrome扩展程序/应用程序只能访问沙盒文件系统,这完全不能满足我的需求。由于Chrome正在停止对NPAPI的支持,因此构建NPAPI插件是不可能的since Chrome is discontinuing support for NPAPI。文件URI也无法解决此问题。它们的显示效果很丑陋,没有拖放、没有大图标/缩略图、没有排序等。他们想要Windows资源管理器的全部功能。
我想到的唯一可行的选择是创建一个本地的node.js服务器,向该服务器进行localhost CORS请求,然后从node运行exec命令。
还有更好的主意吗?
2个回答

3
一种可能的方法是在用户的操作系统中注册一个自定义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等效项),并在磁盘上放置一个小脚本。但这比你提出的运行node.js服务器要轻量级得多。
链接的教程使用Python脚本,但即使对于您的需求来说,那也可能过于复杂。批处理文件可能已经足够了。
编辑:另外请注意实现此类自定义处理程序的安全性问题。任何浏览器中的任何网页都可能利用您的自定义协议,并且攻击者将能够向您的脚本传递任意数据。您应该采取措施确保该脚本不会意外执行恶意网页注入的任意命令,并且它只会打开一个文件夹,而不会做其他任何事情。

0

这将需要每个客户端运行一个node.js服务器,这在您的情况下似乎不现实。

您可以使用文件URI

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


这个项目只有一个人在使用,所以这不会是一个问题。文件URI并不是解决方案。他们想要在Windows资源管理器中浏览他们的文件,带有漂亮的图标、缩略图和拖放功能等。 - Joseph Silber
是的,我可以打开本地文件夹,但它仍然停留在Chrome内部。 - Laurent Perrin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接