V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sq4537
V2EX  ›  程序员

困扰我多年的问题,如何用 Webkit 内核的浏览器以文件夹的方式,打开本地文件夹?

  •  
  •   sq4537 · 2023-11-02 22:19:43 +08:00 · 861 次点击
    这是一个创建于 411 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Webkit 内核浏览器打开本地文件夹,是在浏览器窗口里的,如图。
    https://i.postimg.cc/mDN8fSs5/20231102215930.jpg
    很讨厌这种浏览方式。


    想知道有什么办法点击网页按钮后,直接以文件夹的方式打开文件夹,而不是在浏览器里浏览。以前的 IE 就是直接打开文件夹的
    SmiteChow
        1
    SmiteChow  
       2023-11-03 09:46:35 +08:00   ❤️ 1
    你编码的仅仅是 URI 地址,并未指定具体协议,浏览器 detect 到是文件系统的 URI 它会自动给你把协议头 file://加上然后去加载。

    你如果要指定操作系统上的 app 去执行加载资源的话,比如你说的文件夹方法其实质是资源管理器 app:explorer.exe ,由于它并未在系统中注册 URL 协议头,你要自己动手:

    ```gpt
    要使 Chrome 支持自定义协议 app ,您需要进行以下步骤:

    创建一个注册表项:在 Windows 操作系统中,打开注册表编辑器( regedit ),导航到 HKEY_CLASSES_ROOT 键下。在该键下创建一个新的子键,命名为您的自定义协议(例如,myapp )。

    在新创建的子键下,创建一个名为"URL Protocol"的字符串值,并将其值设置为一个空字符串。

    创建一个名为"shell"的子键,并在该子键下创建一个名为"open"的子键。

    在"open"子键下,创建一个名为"command"的子键,并将其默认值设置为您的应用程序的可执行文件路径,以及您希望传递给应用程序的参数。例如,"C:\Path\to\your\app.exe %1"。

    保存注册表编辑器中的更改,并关闭编辑器。

    在您的网页中,使用您的自定义协议链接。例如,<a href="myapp://">打开我的应用</a>。

    当用户点击链接时,Chrome 将尝试启动您的应用程序,并将链接作为参数传递给应用程序。请注意,如果用户的计算机上没有安装您的应用程序,或者他们的浏览器没有正确配置自定义协议,那么该链接可能无法正常工作。

    请注意,此方法仅适用于 Windows 操作系统。对于其他操作系统,可能需要其他方法来实现自定义协议的支持。
    ```
    sq4537
        2
    sq4537  
    OP
       2023-11-04 07:04:04 +08:00
    @SmiteChow 有点复杂,我还以为可以靠 JS 能直接解决。
    最近玩 Stable Diffusion 发现他有个按钮是可以直接打开输出文件夹的,然而我另存为页面想逐行删除代码来研究时,打开发现那个按钮就失效了,不知道是不是 Stable Diffusion 打开后后台有个命令窗口他们是再这里执行打开的。

    另外我还发现 edge 或者 chrome 的下载页 edge://downloads/all 和 chrome://downloads/ 也都有一个按钮是直接打开下载文件夹, 但是我另存为页面后也想逐行删代码来研究,但依然还是不行。
    SmiteChow
        3
    SmiteChow  
       2023-11-04 09:32:04 +08:00
    js 当然能解决,那是另外一个 web api ,叫做 File System Access API ,是最近一两年新增的 feature 。

    ```gpt
    File System Access API 是一个 Web API ,它允许 Web 应用程序以安全的方式访问用户的本地文件系统。它提供了一种简单的方式来读取、写入和管理文件,而无需使用传统的文件上传和下载方法。

    File System Access API 的主要目标是改善 Web 应用程序与本地文件系统之间的交互,使用户能够更方便地管理和操作他们的文件。通过使用这个 API ,开发人员可以创建文件选择器,让用户选择要操作的文件,然后可以直接读取或写入文件的内容。

    File System Access API 通过使用权限模型来确保用户的文件安全。在访问用户的文件系统之前,应用程序需要获得用户的授权。用户可以选择授予应用程序对整个文件系统的访问权限,或者只授予对特定目录或文件的访问权限。

    使用 File System Access API ,开发人员可以轻松地创建功能强大的 Web 应用程序,例如文本编辑器、图像编辑器、文件管理器等。这个 API 的目标是提供一种更直接、更一致的方式来访问用户的文件系统,以改善 Web 应用程序的用户体验。
    ```
    SmiteChow
        4
    SmiteChow  
       2023-11-04 09:43:12 +08:00
    要注意的是 File System Access API 打开的文件系统管理器(具体哪个 app 由操作系统决定)都是模态窗口,通常与 js 的逻辑深度绑定的(要么读取要么写入),并不是 URL protocol 一样可以随意指定 app 进行启动,且是普通窗体。
    SmiteChow
        5
    SmiteChow  
       2023-11-04 09:46:07 +08:00
    另外一个要注意的是:edge 或者 chrome 的下载页并不是普通网页,他并未运行在沙盒中,他们是传统的 app 功能,只不过使用了 web 的渲染而已,所以你不能通过这些页面的功能去反推 web api ,这是不可靠的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.