recursal/MDN huggingface dataset:
DataTransfer
============

`DataTransfer` 对象用于保存拖动并放下（drag and drop）过程中的数据。它可以保存一项或多项数据，这些数据项可以是一种或者多种数据类型。关于拖放的更多信息，请参见 Drag and Drop.

这个对象可以从所有拖动事件 `drag events` 的 `dataTransfer` 属性上获取。

构造函数
----

`DataTransfer()`

生成并且返回一个新的 `DataTransfer` 对象。

属性
--

### 标准属性

`DataTransfer.dropEffect`

获取当前选定的拖放操作类型或者设置的为一个新的类型。值必须为 `none`, `copy`, `link` 或 `move`。

`DataTransfer.effectAllowed`

提供所有可用的操作类型。必须是 `none`, `copy`, `copyLink`, `copyMove`, `link`, `linkMove`, `move`, `all` or `uninitialized` 之一。

`DataTransfer.files`

包含数据传输中可用的所有本地文件的列表。如果拖动操作不涉及拖动文件，则此属性为空列表。

`DataTransfer.items` 只读 

提供一个包含所有拖动数据列表的 `DataTransferItemList` 对象。

`DataTransfer.types` 只读 

一个提供 `dragstart` 事件中设置的格式的 `strings` 数组。

### Gecko 属性

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**备注：** 本节中的所有属性为 Gecko 特有。

`DataTransfer.mozCursor`

给出拖动光标的状态。这主要用于在拖动期间控制光标。

`DataTransfer.mozSourceNode` 只读 

按下鼠标按钮按下启动拖动操作时鼠标光标所在的 `Node` 。对于外部拖动或调用方无法访问节点，此值为 `null` 。

`DataTransfer.mozUserCancelled` 只读 

此属性仅适用于 `dragend` 事件，如果通过用户按下 escape 取消拖动操作，则为 `true` 。在所有其他情况下，这将为 `false` ，包括由于其他原因（如，放置在无效位置）导致的拖动失败。

### 不推荐的属性

`DataTransfer.mozItemCount` 只读  
已弃用

提供拖动操作中的项目数。在 Firefox71 中删除。

方法
--

### 标准方法

`DataTransfer.clearData()`

删除与给定类型关联的数据。类型参数是可选的。如果类型为空或未指定，则删除与所有类型关联的数据。如果指定类型的数据不存在，或者 data transfer 中不包含任何数据，则该方法不会产生任何效果。

`DataTransfer.getData()`

检索给定类型的数据，如果该类型的数据不存在或 data transfer 不包含数据，则返回空字符串。

`DataTransfer.setData()`

设置给定类型的数据。如果该类型的数据不存在，则将其添加到末尾，以便类型列表中的最后一项将是新的格式。如果该类型的数据已经存在，则在相同位置替换现有数据。

`DataTransfer.setDragImage()`

用于设置自定义的拖动图像。

### Gecko 方法

**非标准:** 该特性是非标准的，请尽量不要在生产环境中使用它！

**备注：** 本节所有方法为 Gecko 专有。

`DataTransfer.addElement()` (en-US)

Sets the drag source to the given element.

### 不推荐的方法

`DataTransfer.mozClearDataAt()` 
已弃用

Removes the data associated with the given format for an item at the specified index. The index is in the range from zero to the number of items minus one. Removed in Firefox 71.

`DataTransfer.mozGetDataAt()` 
已弃用

Retrieves the data associated with the given format for an item at the specified index, or null if it does not exist. The index should be in the range from zero to the number of items minus one. Removed in Firefox 71.

`DataTransfer.mozSetDataAt()` 
已弃用

A data transfer may store multiple items, each at a given zero-based index. `mozSetDataAt()` may only be called with an index argument less than `mozItemCount` in which case an existing item is modified, or equal to `mozItemCount` in which case a new item is added, and the `mozItemCount` is incremented by one. Removed in Firefox 71.

`DataTransfer.mozTypesAt()` 
已弃用

Holds a list of the format types of the data that is stored for an item at the specified index. If the index is not in the range from 0 to the number of items minus one, an empty string list is returned. Removed in Firefox 71.

示例
--

本文档中的每个方法和属性都有自己的参考页面，每个参考页面中都直接包含了接口的示例或给出了示例的链接。

规范
--

| Specification |
| --- |
| HTML Standard # the-datatransfer-interface |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 拖与放
* 拖动操作
* 推荐拖动类型
* DataTransfer 测试 - 粘贴、拖放
HTMLSlotElement
===============

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

* Learn more
* See full compatibility
* Report feedback
**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

Shadow DOM API 的接口 HTMLSlotElement 使其能够访问到 HTML 元素 <slot> 的名字和分配的节点

属性
--

`HTMLSlotElement.name`

`DOMString`: 可以用来设置和获取 slot 的名字

方法
--

`HTMLSlotElement.assignedNodes()` (en-US)

Returns the sequence of elements assigned to this slot, or alternatively the slot's fallback content.

规范
--

| Specification |
| --- |
| HTML Standard # htmlslotelement |

浏览器的兼容性
-------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
文件与目录条目 API
===========

文件与目录条目（File and Directory Entries）API 模拟一个 web 应用可以导航和访问的本地文件系统。你可以在虚拟的沙箱文件系统中开发一个读、写、创建文件或者目录的应用。

访问文件系统
------

有两种方法可以访问当前规范草案中定义的文件系统：

* 当处理用于拖放的 `drop` 事件时，你可以调用 `DataTransferItem.webkitGetAsEntry()` 来为被放置（dropped）的项获取 `FileSystemEntry` (en-US)。如果结果不是 `null`，那么它就是一个被放置的文件或目录，你可以使用文件系统调用来处理它。
* `HTMLInputElement.webkitEntries` (en-US) 属性允许你访问当前选定文件的 `FileSystemFileEntry` 对象，但前提是将它们拖放到文件选择器（Firefox bug 1326031）。如果 `HTMLInputElement.webkitdirectory` 为真，则 `<input>` 元素是一个目录选择器，你将得到表示每个选择的目录的 `FileSystemDirectoryEntry` 对象。
接口
--

文件与目录条目 API 包含以下接口：

`FileSystem`

表示文件系统。

`FileSystemEntry` (en-US)

表示文件系统中单个条目的基本接口。这是由表示文件或目录的其他接口实现的。

`FileSystemFileEntry`

表示文件系统中的单个文件。

`FileSystemDirectoryEntry`

表示文件系统中的单个目录。

`FileSystemDirectoryReader` (en-US)

该接口通过调用 `FileSystemDirectoryEntry.createReader()` (en-US) 创建，提供了允许读取目录内容的功能。

规范
--

| Specification |
| --- |
| File and Directory Entries API # api-domfilesystem |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 介绍文件与目录条目 API
* Firefox 中的文件与目录条目 API 支持
DocumentType
============

**`DocumentType`** 接口表示了一个包含文档类型的节点 `Node` .

EventTarget

Node

DocumentType属性
--

*继承自父节点 `Node`, 并实现了 `ChildNode` 接口。*

`DocumentType.entities` 只读  
已弃用

一个在文档类型定义 (DTD) 中声明的实体`NamedNodeMap`，在这个映射（map）中的每个节点实现了`Entity`接口

`DocumentType.internalSubset` 只读  
已弃用

一个表示内部子集的`DOMString`，如果没有的话则为`null` ，例：`"<!ELEMENT foo (bar)>"`

`DocumentType.name` (en-US) 只读 

`DOMString`，文档类型的名称，例：`<!DOCTYPE HTML>`中的“`html`”

`DocumentType.notations` 只读  
已弃用

在文档类型定义（DTD）中声明符号的`NamedNodeMap`，在这个映射（map）中的所有节点实现了`Notation`接口

`DocumentType.publicId` (en-US) 只读 

一个`DOMString`，例：HTML5 中的空字符串——`"-//W3C//DTD HTML 4.01//EN"`。

`DocumentType.systemId` (en-US) 只读 

一个`DOMString`，例：HTML5 中的空字符串——`"http://www.w3.org/TR/html4/strict.dtd"`。

方法
--

*继承方法自父节点，`Node`, 并实现了 `ChildNode` 接口。*

`ChildNode.remove()` (en-US) 
实验性

从父节点的子节点的列表中移除这个对象。

规范
--

| Specification |
| --- |
| DOM Standard # interface-documenttype |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* DOM 接口索引
* `Entity`
* `Notation`
StorageManager
==============

**安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

Storage API的 **`StorageManager`** 接口提供了用于管理数据本地存储权限和估算可用存储空间的接口。你可以使用`navigator.storage` (en-US)或`WorkerNavigator.storage` (en-US)对此接口进行引用。

方法
--

`StorageManager.estimate()` 安全上下文

返回一个`StorageEstimate`对象，此对象包含为你的域名预留的存储空间总大小和你已经使用的存储空间大小。

`StorageManager.persist()` 安全上下文

如果你的 user agent 能够将你域名下的数据持久保存，那么将返回一个状态为 resolve 的`Promise`

`StorageManager.persisted()` 安全上下文

如果你的站点已经被授予可使用数据本地存储的权限，则返回一个状态为 resolve 的`Promise`

规范
--

| Specification |
| --- |
| Storage Standard # storagemanager |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
FileSystemFileEntry
===================

**非标准:** 该特性是非标准的，请尽量不要在生产环境中使用它！

文件系统 API 的 **`FileSystemFileEntry`** 接口表示文件系统中的文件。它提供了属性，描述文件的属性，以及 `file()` (en-US) 方法，它创建了可以用于读取文件的 `File` 对象。

**备注：** 由于这是个非标准 API，它的规范当前并不在标准化过程中。重要的是要记住，并不是所有浏览器都实现了它，并且实现它的浏览器可能仅仅实现一小部分。点击 Browser compatibility 来查看更多细节。

属性
--

从它的父接口 `FileSystemEntry` (en-US) 继承属性，但是这个接口没有独特的属性。

方法
--

`file()` (en-US)

创建新的 `File` 对象，它可以用于读取文件。

### 废弃的方法

`createWriter()` (en-US) 
已弃用

创建新的 `FileWriter` 对象，它允许写入由文件系统条目表示的对象。

基本概念
----

为了向文件写入内容，通过调用 `createWriter()` (en-US) 创建 `FileWriter` 对象。为了读取文件，通过调用 `file()` (en-US)，获取表示其内容的 `File` 对象。

### 示例

下面的代码创建了一个空文件，叫做 `log.txt`（如果不存在的话），并使用文本 "Meow" 来填充。在成功的回调中，设置了事件处理器，来处理 `error` `error` 和 `writeend` 事件。通过创建 blob，向其追加文本，以及将 blob 传递给 `FileWriter.write()`，文本数据写入了文件。


```js
function onInitFs(fs) {
  fs.root.getFile(
    "log.txt",
    { create: true },
    function (fileEntry) {
      // Create a FileWriter object for our FileSystemFileEntry (log.txt).
      fileEntry.createWriter(function (fileWriter) {
        fileWriter.onwriteend = function (e) {
          console.log("Write completed.");
        };

        fileWriter.onerror = function (e) {
          console.log("Write failed: " + e.toString());
        };

        // Create a new Blob and write it to log.txt.
        var bb = new BlobBuilder();
        bb.append("Meow");

        fileWriter.write(bb.getBlob("text/plain"));
      }, errorHandler);
    },
    errorHandler,
  );
}

window.requestFileSystem(window.TEMPORARY, 1024 \* 1024, onInitFs, errorHandler);
```

规范
--

| Specification |
| --- |
| File and Directory Entries API # api-fileentry |

这个 API 没有官方的 W3C 或者 WHATWG 规范。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 文件和驱动器条目 API
* 文件系统 API 简介
FormData
========

**`FormData`** 接口提供了一种表示表单数据的键值对 `key/value` 的构造方式，并且可以轻松的将数据通过`XMLHttpRequest.send()` 方法发送出去，本接口和此方法都相当简单直接。如果送出时的编码类型被设为 `"multipart/form-data"`，它会使用和表单一样的格式。

如果你想构建一个简单的`GET`请求，并且通过`<form>`的形式带有查询参数，可以将它直接传递给`URLSearchParams`。

实现了 `FormData` 接口的对象可以直接在`for...of`结构中使用，而不需要调用`entries()` : `for (var p of myFormData)` 的作用和 `for (var p of myFormData.entries())` 是相同的。

**备注：** 此特性可用于 Web Workers。

构造函数
----

`FormData()`

创建一个新的 `FormData` 对象。

方法
--

`FormData.append()`

向 `FormData` 中添加新的属性值，`FormData` 对应的属性值存在也不会覆盖原值，而是新增一个值，如果属性不存在则新增一项属性值。

`FormData.delete()`

从 FormData 对象里面删除一个键值对。

`FormData.entries()`

返回一个包含所有键值对的`iterator`对象。

`FormData.get()`

`返回在 FormData` 对象中与给定键关联的第一个值。

`FormData.getAll()`

返回一个包含 `FormData` 对象中与给定键关联的所有值的数组。

`FormData.has()`

`返回一个布尔值表明 FormData` 对象是否包含某些键。

`FormData.keys()`

返回一个包含所有键的`iterator`对象。

`FormData.set()`

给 `FormData` 设置属性值，如果`FormData` 对应的属性值存在则覆盖原值，否则新增一项属性值。

`FormData.values()`

返回一个包含所有值的`iterator`对象。

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # interface-formdata |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `XMLHTTPRequest`
* 使用 XMLHttpRequest
* 使用 FormData 对象
* `<form>`
Web Locks API
=============

**安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

**Web Locks API** 允许在一个标签页或 worker 中运行的脚本异步获取锁，在执行工作时保持锁，最后释放锁。持有锁时，在同一源中执行的其他脚本都无法获取相同的锁，这允许在多个标签页或 worker 中运行的 Web 应用程序协调工作和资源的使用。

**备注：** 此特性在 Web Worker 中可用

概念和用法
-----

锁是一个抽象概念，代表一些潜在的共享资源，由 Web 应用程序选择的名称进行标识。例如，如果在多个标签页中运行的 Web 应用程序想要确保只有一个标签页在网络和索引数据库之间同步数据，则每个标签页都可以尝试获取“my\_net\_db\_sync”锁，但只有一个标签页会成功（领导者选举模式。）

API 用法如下：

1. 请求锁。
2. 在异步任务中持有锁的同时完成工作。
3. 任务完成后锁自动释放。


```js
navigator.locks.request("my\_resource", async (lock) => {
  // 锁已被获取。
  await do\_something();
  await do\_something\_else();
  // 现在锁将被释放。
});
```


当持有锁时，来自此执行上下文或其他标签页以及 Worker 进程的相同锁的请求将排队。仅当锁被释放时，第一个排队的请求才会被授予锁。

API 提供了可根据需要使用的可选功能，包括：

* 从异步任务返回值
* 共享锁和独占锁模式
* 条件获取
* 诊断以查询源中锁的状态
* 防止死锁的应急通道

锁的范围仅限于同一个源内；一个标签页从 `https://example.com` 获取的锁对另一个标签页从 `https://example.org:8080` 获取的锁没有影响，因为它们是不同的源。

主要入口点是请求锁的 `navigator.locks.request()` 方法。它需要一个锁的名称、一组可选选项和一个回调方法。授予锁时将调用回调方法。当回调方法返回时，锁会自动释放，因此通常回调是一个*异步函数*，这会导致只有当异步函数完全完成时才会释放锁。

`request()` 方法本身返回一个 Promise，一旦锁被释放，该 Promise 就会兑现；在 `async` 函数中，脚本可以使用 `await` 关键字等待调用以使异步代码线性调用。例如：


```js
await do\_something\_without\_lock();

// 请求锁。
await navigator.locks.request("my\_resource", async (lock) => {
  // 锁已被获取。
  await do\_something\_with\_lock();
  await do\_something\_else\_with\_lock();
  // 现在锁将被释放。
});
// 锁已被释放。

await do\_something\_else\_without\_lock();
```

### 选项

请求锁时可以传递一些选项：

* `mode`：默认模式为“独占”（`"exclusive"`），但可以指定为“共享”（`"shared"`）模式。锁只能有一个“独占”持有者，但可以同时授予多个“共享”请求。这可用于实现读者——写者模式。
* `ifAvailable`：如果指定，如果不等待就无法立即授予锁定，则锁定请求将失败。使用 `null` 调用回调方法。
* `steal`：如果指定，则将释放任何持有的同名锁，并且请求将被授予，抢占任何排队的请求。
* `signal`：可以传入一个 `AbortSignal`，允许中止锁定请求。这可用于实现请求超时。
### 监控

脚本可以使用 `navigator.locks.query()` 方法来内省源锁管理器的状态。这在调试时非常有用，例如，确定无法获取锁的原因。结果是一个锁管理器状态的快照，它标识了拍摄快照时持有的锁和请求中的锁以及有关每个锁的一些附加数据（例如模式）。

### 进阶用法

对于更复杂的情况，例如在任意时间内保持锁，回调可以返回一个脚本显式解决的 Promise：


```js
// 捕获 Promise 控制函数：
let resolve, reject;
const p = new Promise((res, rej) => {
  resolve = res;
  reject = rej;
});

// 请求锁：
navigator.locks.request(
  "my\_resource",
  // 锁已被获取。
  (lock) => p, // 现在锁将被保持直到调用 resolve() 方法或 reject() 方法为止。
);
```

### 死锁

当进程的每个部分都在等待无法满足的请求而无法再取得进展时，就会发生死锁。此 API 可能会在复杂的用例中发生这种情况，例如，如果无序请求多个锁。如果标签页 1 持有锁 A 并且标签页 2 持有锁 B，接着标签页 1 也尝试获取锁 B，而标签页 2 也尝试获取锁 A，则两个请求都不会被授予锁。Web 应用程序可以通过多种策略来避免这种情况，例如确保锁定请求不嵌套、始终有序或设定超时。请注意，此类死锁仅影响锁本身和依赖于它们的代码；浏览器、其他标签页和页面中的其他脚本不受影响。

接口
--

`Lock`

提供先前请求的锁的名称和模式，该锁会被传入 `LockManager.request()` 的回调方法接收。

`LockManager`

提供请求新的 `Lock` 对象和查询现有 `Lock` 对象的方法。要获取 `LockManager` 的实例，请访问 `navigator.locks`。

### 其他接口的扩展

`Navigator.locks` 只读 

返回一个 `LockManager` 对象，该对象提供请求新的 `Lock` 对象和查询现有 `Lock` 对象的方法。

`WorkerNavigator.locks` 只读 

返回一个 `LockManager` 对象，该对象提供请求新的 `Lock` 对象和查询现有 `Lock` 对象的方法。

规范
--

| Specification |
| --- |
| Web Locks API  |

浏览器兼容性
------

### api.LockManager

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.Lock

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
CSSRule
=======

**`CSSRule`** 接口表示一条 CSS 规则。有几种不同的规则类型，在下面的类型常量部分中有悉数列出。

`CSSRule` 接口指定了所有类型的规则的公共属性，而特定类型的规则的专有属性则在这些规则各自类型的、更专用的接口中被指定。

可以通过 `CSSStyleSheet` 的 `cssRules` 列表了解更多关于 `CSSRule` 的介绍。

所有 CSSRule 实例共有的属性
------------------

`CSSRule.cssText`

返回规则的文本表示。例如 `"h1,h2 { font-size: 16pt }"`

`CSSRule.parentRule` (en-US) 只读 

返回包含规则，否则返回 `null`。例如：如果此规则是 `@media` 块中的样式规则，则其父规则将是该 `CSSMediaRule`。

`CSSRule.parentStyleSheet` 只读 

返回包含此规则的样式表的 `CSSStyleSheet` 对象。

`CSSRule.type` (en-US) 只读 

规则类型，表示 CSS 规则类型 类型常量 中的一种类型。

常量
--

### 类型常量

`CSSRule` 接口通过一系列整型常量来约束 `CSSRule` 的 `type` (en-US) 取值范围，同时这些常量也对应规则的具体实现接口。这些常量和接口的对应关系如下：

* `CSSStyleRule`
* `CSSImportRule` (en-US)
* `CSSMediaRule`
* `CSSFontFaceRule` (en-US)
* `CSSPageRule`
* `CSSNamespaceRule` (en-US)
* `CSSKeyframesRule` (en-US)
* `CSSKeyframeRule` (en-US)
* `CSSCounterStyleRule` (en-US)
* `CSSDocumentRule`
* `CSSSupportsRule`
* `CSSFontFeatureValuesRule` (en-US)
* `CSSViewportRule`

An up-to-date informal list of constants can be found on the CSSWG Wiki.

语法
--

使用 WebIDL 语法格式进行描述。
```

interface CSSRule {
    const unsigned short STYLE_RULE = 1;
    const unsigned short CHARSET_RULE = 2;
    const unsigned short IMPORT_RULE = 3;
    const unsigned short MEDIA_RULE = 4;
    const unsigned short FONT_FACE_RULE = 5;
    const unsigned short PAGE_RULE = 6;
    const unsigned short KEYFRAMES_RULE = 7;
    const unsigned short KEYFRAME_RULE = 8;
    const unsigned short NAMESPACE_RULE = 10;
    const unsigned short COUNTER_STYLE_RULE = 11;
    const unsigned short SUPPORTS_RULE = 12;
    const unsigned short DOCUMENT_RULE = 13;
    const unsigned short FONT_FEATURE_VALUES_RULE = 14;
    const unsigned short VIEWPORT_RULE = 15;
    const unsigned short REGION_STYLE_RULE = 16;
    readonly attribute unsigned short type;
    attribute DOMString cssText;
    readonly attribute CSSRule? parentRule;
    readonly attribute CSSStyleSheet? parentStyleSheet;
};
```

规范
--

| Specification |
| --- |
| CSS Object Model (CSSOM) # the-cssrule-interface |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* Using dynamic styling information (en-US)
PageTransitionEvent
===================

Page transition events fire when a webpage is being loaded or unloaded.

当网页在加载完成或卸载后会触发页面传输事件（Page transition events）。

DOM Information
---------------

### Inheritance Hierarchy

EventPageTransitionEvent

Example
-------

### HTML


```html
<!doctype html>
<html>
  <body onpageshow="myFunction(event)"></body>
</html>
```

### JavaScript


```js
function myFunction(event) {
  if (event.persisted) {
    alert("The page was cached by the browser");
  } else {
    alert("The page was NOT cached by the browser");
  }
}
```

Members
-------

The **PageTransitionEvent** object has these types of members:

* Properties
### Properties

The **PageTransitionEvent** object has these properties.

| Property | Access type | Description |
| --- | --- | --- |
| **persisted** | 只读 | 标记页面是否从缓存（Backforward Cache）中加载 |
GamepadButton
=============

**`GamepadButton`** 接口定义了在一个手柄或其他控制器的唯一的一个按键，允许访问不同控制器设备可用类型的按钮的当前状态。

`GamepadButton` 对象是由 `Gamepad` 接口的 `buttons` 属性返回的可查询任意值的数组返回的。

**备注：** 上述情况是在 Firefox Gecko 28 及以上的；Chrome 和较早版本的 Firefox 访问此属性时仍然会返回一个双精浮点值的数组。

属性
--

`GamepadButton.value` 只读 

一个用来表示按钮当前状态的双精浮点值，比如说许多现代控制器都有的扳机键。其值被规范至范围 0.0 —1.0 之间，其中 0.0 表示按钮没有被按下，而 1.0 表示按钮被完全按下 (按到底)。

`GamepadButton.pressed` 只读 

一个指示当前按钮是被按下 (`true`) 还是没有被按下 (`false`) 的布尔值。

示例
--

接下来的代码来自于我 (文作者) 的 Gamepad API 按钮示例 (你可以在线查看示例，并在 Github 上查找源代码。) 注意代码分支——在 Chrome 中`Navigator.getGamepads` 需要一个 `webkit` 前缀并且按钮值被存储为一个双精浮点值的数组，然而在 Firefox 中 `Navigator.getGamepads` 不需要前缀，且按钮值被存储为 `GamepadButton` 对象数组；其中有我们需要的 `GamepadButton.value` 或 `GamepadButton.pressed` 属性，这取决于他们是什么类型的按钮。在这个简单的示例中我只是允许了它们。


```js
function gameLoop() {
  if (navigator.webkitGetGamepads) {
    var gp = navigator.webkitGetGamepads()[0];

    if (gp.buttons[0] == 1) {
      b--;
    } else if (gp.buttons[1] == 1) {
      a++;
    } else if (gp.buttons[2] == 1) {
      b++;
    } else if (gp.buttons[3] == 1) {
      a--;
    }
  } else {
    var gp = navigator.getGamepads()[0];

    if (gp.buttons[0].value > 0 || gp.buttons[0].pressed == true) {
      b--;
    } else if (gp.buttons[1].value > 0 || gp.buttons[1].pressed == true) {
      a++;
    } else if (gp.buttons[2].value > 0 || gp.buttons[2].pressed == true) {
      b++;
    } else if (gp.buttons[3].value > 0 || gp.buttons[3].pressed == true) {
      a--;
    }
  }

  ball.style.left = a \* 2 + "px";
  ball.style.top = b \* 2 + "px";

  var start = rAF(gameLoop);
}
```

规范
--

| Specification |
| --- |
| Gamepad # gamepadbutton-interface |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

使用 Gamepad API
XPathEvaluator
==============

`XPathEvaluator` 接口能够对 XPath 表达式进行编译和求值。

该接口实现自`Document`的接口。

方法
--

`XPathEvaluator.createExpression()` (en-US)

创建一个解析过的 XPath 和解析后的 namespaces

`XPathEvaluator.createNSResolver()` (en-US)

任意 DOM 节点能够通过该方法来解析 namespaces，允许通过节点出现在文档中的相对上下文对 XPath 表达式进行求值。

`XPathEvaluator.evaluate()` (en-US)

对 XPath 字符串求值，返回可能的确切类型的匹配结果。

示例
--

下面的实例展示了如何使用`XPathEvaluator`接口。

### HTML


```html
<div>XPath example</div>
<div>Number of &lt;div&gt;s: <output></output></div>
```

### JavaScript


```js
var xpath = "//div";
var evaluator = new XPathEvaluator();
var expression = evaluator.createExpression("//div");
var result = expression.evaluate(
  document,
  XPathResult.ORDERED\_NODE\_SNAPSHOT\_TYPE,
);
document.querySelector("output").textContent = result.snapshotLength;
```

### 结果

规范
--

| Specification |
| --- |
| DOM Standard # interface-xpathevaluator |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `document.createExpression()`
* `XPathExpression` (en-US)
CredentialsContainer
====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

Credential Management API 的 **`CredentialsContainer`** 接口提供了请求 credentials 和通知用户代理（当成功登陆或登出事件发生时）的方法。可通过 `Navigator.credentials` 获得该接口。

属性
--

None.

### 事件

None.

返回一个带有处理值 `Credential`（若它能够使用提供的选项创建的话）的 `Promise` ，或返回 `null`（若不能创建 `Credential`）。在特殊情况下，返回的 `Promise` 对象可能 reject。

方法
--

`CredentialsContainer.create()` (en-US)

Returns a `Promise` that resolves with a new `Credential` (en-US) instance based on the provided options, or `null` of no `Credential` object can be created.

`CredentialsContainer.get()` (en-US)

Returns a `Promise` that resolves with the `Credential` (en-US) instance that matches the provided parameters.

`CredentialsContainer.preventSilentAccess()` (en-US)

Sets a flag that specifies whether automatic log in is allowed for future visits to the current origin, then returns an empty `Promise`. For example, you might call this, after a user signs out of a website to ensure that he/she isn't automatically signed in on the next site visit. Earlier versions of the spec called this method `requireUserMediation()`. See Browser compatibility for support details.

`CredentialsContainer.store()` (en-US)

Stores a set of credentials for a user, inside a provided `Credential` (en-US) instance and returns that instance in a `Promise`.

示例
--


```js
// TBD
```

Specifications
--------------

| Specification |
| --- |
| Credential Management Level 1 # credentialscontainer |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
IDBFactory
==========

IndexedDB API 的`IDBFactory` 接口让程序可以异步存取 indexed databases。`window.indexedDB` 对象实现了这个接口。你可以通过这个对象而不是直接使用`IDBFactory`接口打开——创建或者连接——和删除一个数据库。

Methods
-------

`IDBFactory.open`

请求打开一个数据库的连接（connection to a database）。

`IDBFactory.deleteDatabase` (en-US)

请求删除数据库。

`IDBFactory.cmp` (en-US)

比较两个键的方法并返回一个结果，表明哪个值更大。

### 过时的 Methods

`IDBFactory.open` (en-US), the original version 
已弃用

一个被废弃的方法请求打开一个数据库的连接，仍然在一些浏览器中被实施 (connection to a database).

Example
-------

In the following code snippet, we make a request to open a database, and include handlers for the success and error cases. For a full working example, see our To-do Notifications app (view example live.)


```js
var note = document.querySelector("ul");

// In the following line, you should include the prefixes of implementations you want to test.
window.indexedDB =
  window.indexedDB ||
  window.mozIndexedDB ||
  window.webkitIndexedDB ||
  window.msIndexedDB;
// DON'T use "var indexedDB = ..." if you're not in a function.
// Moreover, you may need references to some window.IDB\* objects:
window.IDBTransaction =
  window.IDBTransaction ||
  window.webkitIDBTransaction ||
  window.msIDBTransaction;
window.IDBKeyRange =
  window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
// (Mozilla has never prefixed these objects, so we don't need window.mozIDB\*)

// Let us open version 4 of our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

// these two event handlers act on the database being opened successfully, or not
DBOpenRequest.onerror = function (event) {
  note.innerHTML += "<li>Error loading database.</li>";
};

DBOpenRequest.onsuccess = function (event) {
  note.innerHTML += "<li>Database initialised.</li>";

  // store the result of opening the database in the db variable. This is used a lot later on, for opening transactions and suchlike.
  db = request.result;
};
```

Specifications
--------------

| Specification |
| --- |
| Indexed Database API 3.0 # factory-interface |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* Using IndexedDB
* Starting transactions: `IDBDatabase`
* Using transactions: `IDBTransaction`
* Setting a range of keys: `IDBKeyRange`
* Retrieving and making changes to your data: `IDBObjectStore`
* Using cursors: `IDBCursor`
* Reference example: To-do Notifications (view example live.)