2

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

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

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

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


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

有更好的主意吗?

4

2 回答 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-而不是 http-

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

链接的教程使用 Python 脚本,但即使这样也可能超出您的需求。一个批处理文件可能就足够了。

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

于 2013-10-02T15:48:07.423 回答
0

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

您可以使用File URIs

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

于 2013-10-02T15:35:08.597 回答