困扰我多年的问题,如何用 Webkit 内核的浏览器以文件夹的方式,打开本地文件夹? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sq4537
V2EX    程序员

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

  •  
  •   sq4537 2023-11-02 22:19:43 +08:00 1281 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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:4:07 +08:00
    另外一个要注意的是:edge 或者 chrome 的下载页并不是普通网页,他并未运行在沙盒中,他们是传统的 app 功能,只不过使用了 web 的渲染而已,所以你不能通过这些页面的功能去反推 web api ,这是不可靠的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3457 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:21 PVG 12:21 LAX 21:21 JFK 00:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86