Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

文件系统能力

本例通过文件系统扩展让页面请求宿主文件操作。后端声明允许访问的目录和操作,页面通过命令 bridge 使用这份授权。

18_extension_fs · 关键文件:main.mbt, fs.html

行为

页面提供读写和目录操作。原生入口用 PermissionRoot 和操作允许列表注册 fs 能力。

async fn main {
  @proton.html("18 extension fs", resource, width=960, height=720, debug=true)
  ..capability(
    @fs.capability([
      @fs.PermissionRoot(".", [
        "read_file", "write_file", "exists", "kind", "size", "readdir", "mkdir",
        "remove", "rmdir", "rename", "realpath",
      ]),
    ]),
  )
  ..identifier("dev.proton.18-extension-fs")
  .run_or_abort()
}

实现说明

后端安装文件系统扩展,同时选择目录和允许的操作。renderer 提供路径及操作,但不能自行扩大授权根目录。文件不存在和操作未授权是不同失败情况。

此例为了演示允许写入与删除,迁移时应缩小操作列表并选定数据目录。HTML 与 JavaScript 展示直接扩展 bridge,MoonBit 前端也可使用类型化描述符。

运行

完成源码检出与运行时安装后,在仓库根目录执行:

moon -C examples run 18_extension_fs --target native

限制与使用边界

示例允许操作工作目录内的文件,包括写入和删除。体验时使用临时目录;应用只应声明真正需要的路径和操作。