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

2023-11-02 22:19:43 +08:00
 sq4537
Webkit 内核浏览器打开本地文件夹,是在浏览器窗口里的,如图。
https://i.postimg.cc/mDN8fSs5/20231102215930.jpg
很讨厌这种浏览方式。


想知道有什么办法点击网页按钮后,直接以文件夹的方式打开文件夹,而不是在浏览器里浏览。以前的 IE 就是直接打开文件夹的
848 次点击
所在节点    程序员
5 条回复
SmiteChow
2023-11-03 09:46:35 +08:00
你编码的仅仅是 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
2023-11-04 07:04:04 +08:00
@SmiteChow 有点复杂,我还以为可以靠 JS 能直接解决。
最近玩 Stable Diffusion 发现他有个按钮是可以直接打开输出文件夹的,然而我另存为页面想逐行删除代码来研究时,打开发现那个按钮就失效了,不知道是不是 Stable Diffusion 打开后后台有个命令窗口他们是再这里执行打开的。

另外我还发现 edge 或者 chrome 的下载页 edge://downloads/all 和 chrome://downloads/ 也都有一个按钮是直接打开下载文件夹, 但是我另存为页面后也想逐行删代码来研究,但依然还是不行。
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
2023-11-04 09:43:12 +08:00
要注意的是 File System Access API 打开的文件系统管理器(具体哪个 app 由操作系统决定)都是模态窗口,通常与 js 的逻辑深度绑定的(要么读取要么写入),并不是 URL protocol 一样可以随意指定 app 进行启动,且是普通窗体。
SmiteChow
2023-11-04 09:46:07 +08:00
另外一个要注意的是:edge 或者 chrome 的下载页并不是普通网页,他并未运行在沙盒中,他们是传统的 app 功能,只不过使用了 web 的渲染而已,所以你不能通过这些页面的功能去反推 web api ,这是不可靠的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/988040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX