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

时间:2013-10-02 15:25:26

标签: javascript ajax windows filesystems cors

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

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

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

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


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

有更好的主意吗?

2 个答案:

答案 0 :(得分:3)

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

快速Google search让我看到这个体面的教程: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脚本,但即便如此,您的需求也可能过度。批处理文件可能就足够了。

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

答案 1 :(得分:0)

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

您可以使用File URIs

默认情况下,浏览器会拒绝打开它们。但是,根据建议in this answer,您可以要求您的客户安装LocalLinks