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 操作系统。对于其他操作系统,可能需要其他方法来实现自定义协议的支持。 ``` |
2
sq4537 OP @SmiteChow 有点复杂,我还以为可以靠 JS 能直接解决。
最近玩 Stable Diffusion 发现他有个按钮是可以直接打开输出文件夹的,然而我另存为页面想逐行删除代码来研究时,打开发现那个按钮就失效了,不知道是不是 Stable Diffusion 打开后后台有个命令窗口他们是再这里执行打开的。 另外我还发现 edge 或者 chrome 的下载页 edge://downloads/all 和 chrome://downloads/ 也都有一个按钮是直接打开下载文件夹, 但是我另存为页面后也想逐行删代码来研究,但依然还是不行。 |
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 应用程序的用户体验。 ``` |
4
SmiteChow 2023-11-04 09:43:12 +08:00
要注意的是 File System Access API 打开的文件系统管理器(具体哪个 app 由操作系统决定)都是模态窗口,通常与 js 的逻辑深度绑定的(要么读取要么写入),并不是 URL protocol 一样可以随意指定 app 进行启动,且是普通窗体。
|
5
SmiteChow 2023-11-04 09:46:07 +08:00
另外一个要注意的是:edge 或者 chrome 的下载页并不是普通网页,他并未运行在沙盒中,他们是传统的 app 功能,只不过使用了 web 的渲染而已,所以你不能通过这些页面的功能去反推 web api ,这是不可靠的。
|