【问题标题】:Can I open a Windows Explorer window from a web app?我可以从 Web 应用程序打开 Windows 资源管理器窗口吗?
【发布时间】:2013-10-02 15:25:26
【问题描述】:

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

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

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

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


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

有更好的主意吗?

【问题讨论】:

    标签: javascript ajax windows filesystems


    【解决方案1】:

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

    一个快速的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 脚本,但即使这样也可能超出您的需求。一个批处理文件可能就足够了。

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

    【讨论】:

      【解决方案2】:

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

      你可以使用File URIs

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

      【讨论】:

      • 只有一个人在使用这个项目,所以这不是问题。文件 URI 不是解决方案。他们想在 Windows 资源管理器中浏览他们的文件,使用漂亮的图标和缩略图以及拖放和...
      • 是的,我可以打开一个本地文件夹,但它保留在 Chrome 中。
      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多