Skip to content

Commit

Permalink
Apply suggestions from code review
Browse files Browse the repository at this point in the history
Co-authored-by: A1lo <[email protected]>
  • Loading branch information
skyclouds2001 and yin1999 authored Sep 7, 2024
1 parent 8fd98ed commit 099d197
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ createSyncAccessHandle(options)
- `mode` {{optional_inline}} {{non-standard_inline}}
- : 指定访问句柄的锁定模式的字符串。默认值为 `"readwrite"`。可能的值包括:
- `"read-only"`
- : 可以同时在一个文件上打开多个 `FileSystemSyncAccessHandle` 对象(例如,在多个选项卡中使用同一个应用时),前提是它们都以 `"read-only"` 模式打开。打开后,可以在句柄上调用类似读取的方法——{{domxref("FileSystemSyncAccessHandle.read", "read()")}}、{{domxref("FileSystemSyncAccessHandle.getSize", "getSize()")}} 和 {{domxref("FileSystemSyncAccessHandle.close", "close()")}}。
- : 可以同时在一个文件上打开多个 `FileSystemSyncAccessHandle` 对象(例如,在多个标签页中使用同一个应用时),前提是它们都以 `"read-only"` 模式打开。打开后,可以在句柄上调用类似读取的方法——{{domxref("FileSystemSyncAccessHandle.read", "read()")}}、{{domxref("FileSystemSyncAccessHandle.getSize", "getSize()")}} 和 {{domxref("FileSystemSyncAccessHandle.close", "close()")}}。
- `"readwrite"`
- : 每个文件只能打开一个 `FileSystemSyncAccessHandle` 对象。如果在第一个句柄关闭之前尝试打开后续句柄,则会导致抛出 `NoModificationAllowedError` 异常。打开后,可以调用句柄上的任何可用方法。
- `"readwrite-unsafe"`
Expand Down Expand Up @@ -74,9 +74,9 @@ onmessage = async (e) => {

### 带有 `mode` 选项的完整示例

我们的 [`createSyncAccessHandle()` 模式测试](https://createsyncaccesshandle-mode-test.glitch.me/) 示例提供了一个 {{htmlelement("input")}} 字段来输入文本,以及两个按钮——一个用于将输入的文本写入原始私有文件系统中的文件末尾,另一个用于在文件太满时清空文件。
我们的 [`createSyncAccessHandle()` 模式测试](https://createsyncaccesshandle-mode-test.glitch.me/)示例提供了一个 {{htmlelement("input")}} 字段来输入文本,以及两个按钮——一个用于将输入的文本写入原始私有文件系统中的文件末尾,另一个用于在文件太满时清空文件。

尝试探索上面的演示,打开浏览器开发者控制台,以便你可以看到正在发生的事情。如果你尝试在多个浏览器选项卡中打开演示,你会发现可以同时打开多个句柄以同时写入文件。这是因为在 `createSyncAccessHandle()` 调用上设置了 `mode: "readwrite-unsafe"`
尝试探索上面的演示,打开浏览器开发者控制台,以便你可以看到正在发生的事情。如果你尝试在多个浏览器标签页中打开演示,你会发现可以同时打开多个句柄以同时写入文件。这是因为在 `createSyncAccessHandle()` 调用上设置了 `mode: "readwrite-unsafe"`

下面我们将探索代码。

Expand All @@ -90,10 +90,9 @@ onmessage = async (e) => {
<label for="filetext">输入要写入文件的文本:</label>
<input type="text" id="filetext" name="filetext" />
</li>
<li>将你的文本写入文件:<button class="write">撰写文本</button></li>
<li>将你的文本写入文件:<button class="write">写入文本</button></li>
<li>
如果文件太满,则清空该文件:
<button class="empty">空文件</button>
如果文件太满,则清空该文件:<button class="empty">清空文件</button>
</li>
</ol>
```
Expand Down Expand Up @@ -192,7 +191,7 @@ onmessage = function (e) {
accessHandle.read(dataView, { at: 0 });

// 将当前文件内容记录到控制台
console.log("File contents: " + textDecoder.decode(dataView));
console.log("文件内容:" + textDecoder.decode(dataView));

// 刷新更改
accessHandle.flush();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ createWritable(options)
- `"exclusive"`
- : 只能打开一个 `FileSystemWritableFileStream` 写入器。在第一个写入器关闭之前尝试打开后续写入器会导致抛出 `NoModificationAllowedError` 异常。
- `"siloed"`
- : 可以同时打开多个 `FileSystemWritableFileStream` 写入器,每个写入器都有自己的交换文件,例如在多个选项卡中使用同一个应用时。最后打开的写入器会写入其数据,因为每个写入器关闭时都会刷新数据。
- : 可以同时打开多个 `FileSystemWritableFileStream` 写入器,每个写入器都有自己的交换文件,例如在多个标签页中使用同一个应用时。最后打开的写入器会写入其数据,因为每个写入器关闭时都会刷新数据。

### 返回值

Expand Down Expand Up @@ -73,13 +73,13 @@ async function writeFile(fileHandle, contents) {

在上面的演示中,尝试选择文件系统上的文本文件(或输入新文件名),在输入字段中输入一些文本,然后将文本写入文件。打开文件系统上的文件以检查写入是否成功。

此外,尝试同时在两个浏览器选项卡中打开页面。在第一个标签页中选择要写入的文件,然后立即尝试在第二个标签页中选择要写入的同一文件。你应该会收到一条错误消息,因为我们在 `createWritable()` 调用中设置了 `mode: "exclusive"`
此外,尝试同时在两个浏览器标签页中打开页面。在第一个标签页中选择要写入的文件,然后立即尝试在第二个标签页中选择要写入的同一文件。你应该会收到一条错误消息,因为我们在 `createWritable()` 调用中设置了 `mode: "exclusive"`

下面我们将探索代码。

#### HTML

The two {{htmlelement("button")}} elements and text {{htmlelement("input")}} field look like this:
两个 {{htmlelement("button")}} 元素和文本 {{htmlelement("input")}} 字段如下所示:

```html
<ol>
Expand All @@ -89,8 +89,7 @@ The two {{htmlelement("button")}} elements and text {{htmlelement("input")}} fie
<input type="text" id="filetext" name="filetext" disabled />
</li>
<li>
将你的文本写入文件:
<button class="write" disabled>撰写文本</button>
将你的文本写入文件:<button class="write" disabled>写入文本</button>
</li>
</ol>
```
Expand Down
2 changes: 1 addition & 1 deletion files/zh-cn/web/api/filesystemhandle/issameentry/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ isSameEntry(fileSystemHandle)

## 示例

以下函数将单个条目与条目数组进行比对,返回兑现包含不相符条目的新数组的 {{jsxref("Promise")}}。
以下函数将单个条目与条目数组进行比对,并返回一个 {{jsxref("Promise")}},其会兑现包含不相符条目的新数组

```js
async function removeMatches(fileEntry, entriesArr) {
Expand Down
4 changes: 2 additions & 2 deletions files/zh-cn/web/api/filesystemhandle/querypermission/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ queryPermission(descriptor)

### 返回值

一个兑现为 {{domxref('PermissionStatus.state')}} 的 {{jsxref("Promise")}},其值为 `'granted'``'denied'``'prompt'`它也可能因出现以下例外情况之一而被拒绝
一个兑现为 {{domxref('PermissionStatus.state')}} 的 {{jsxref("Promise")}},其值为 `'granted'``'denied'``'prompt'`它也可能因出现以下异常而被拒绝

如果其兑现为“prompt”,则网站必须先调用 `requestPermission()`,然后才能对句柄执行任何操作。如果其兑现为“denied”,则任何操作都将被拒绝。通常,本地文件系统句柄工厂返回的句柄最初将解析为“granted”作为其读取权限状态。但是,除了通过用户撤销权限之外,从 IndexedDB 检索到的句柄也可能解析为“prompt”。
如果其兑现为“prompt”,则网站必须先调用 `requestPermission()`,然后才能对句柄执行任何操作。如果其兑现为“denied”,则任何操作都将被拒绝。通常,本地文件系统句柄工厂返回的句柄最初将兑现“granted”作为其读取权限状态。但是,除了通过用户撤销权限之外,从 IndexedDB 检索到的句柄也可能兑现为“prompt”。

### 异常

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ requestPermission(descriptor)

### 返回值

一个兑现为 {{domxref('PermissionStatus.state')}} 的 {{jsxref("Promise")}},其值为 `'granted'``'denied'``'prompt'`它也可能因出现以下例外情况之一而被拒绝
一个兑现为 {{domxref('PermissionStatus.state')}} 的 {{jsxref("Promise")}},其值为 `'granted'``'denied'``'prompt'`它也可能因出现以下异常而被拒绝

### 异常

- {{jsxref("TypeError")}}
- : 如果没有指定参数或者 `mode` 的值不是 `'read'``'readwrite'`,则抛出此异常。
- `SecurityError` {{domxref("DOMException")}}
- : 在下列情况之一发生时抛出:
- 该方法是在与顶级上下文不[同源](/zh-CN/docs/Web/Security/Same-origin_policy)的上下文中调用的(例如跨源 iframe).
- 没有瞬态用户激活,例如按下按钮。这包括当句柄处于无法使用用户激活的非 Window 上下文中时,例如 Worker.
- 该方法是在与顶级上下文不[同源](/zh-CN/docs/Web/Security/Same-origin_policy)的上下文(例如跨源 iframe)中调用的。
- 没有瞬态用户激活,例如按下按钮。这包括当句柄处于无法使用用户激活的非 Window 上下文(例如 Worker)中时。

## 安全性
## 安全

[瞬态用户激活](/zh-CN/docs/Web/Security/User_activation)是必需的。用户必须与页面或 UI 元素进行交互才能使该特性正常运行。

Expand Down

0 comments on commit 099d197

Please sign in to comment.