recursal/MDN huggingface dataset:
FileList
========

`FileList` 型別物件通常來自 HTML `<input>` (en-US) 元素 `DOM` 物件的 `files` 屬性（property）。你可以操作 `FileList` 物件來存取使用者透過 `<input type="file">` 元素所選取的檔案，或由拖放操作所產生的檔案（請參考 `DataTransfer` (en-US) 物件的更多使用細節）。

**備註：** 在 Gecko 1.9.2 之前，`<input>` (en-US) 元素只支援一次選取一個檔案，這代表了 `FileList` 只能夠包含一個 `File` 物件。從 Gecko 1.9.2 開始，假如 `<input>` 元素的 `multiple` 屬性（attribute）為 true，則 FileList 就可能會包含多個檔案。

使用 FileList
-----------

所有 `<input>` 元素節點的 `DOM` 物件都擁有 `files` 屬性（property），此屬性即為 `FileList`，是一個可藉此存取使用者選取之檔案的類陣列物件。以下範例展示了一個 `type` 屬性（attribute）值為 `file` 的 HTML `<input>` 元素：


```html
<input id="fileItem" type="file" />
```


下面範例演示了如何取得 `<input>` 元素節點中所包含的第一個 `File` 型別物件：


```js
var file = document.getElementById("fileItem").files[0];
```

方法概觀
----

| `File item(index);` |
| --- |

屬性
--

| 屬性名稱 | 型別 | 描述 |
| --- | --- | --- |
| `length` | `integer` | 表示 `FileList` 物件中的檔案數量，唯讀。 |

方法
--

### item()

回傳 `FileList` 中指定索引的 `File` 物件。


```js
File item(
  index
);
```


#### 參數

`index`

要取得的檔案之索引（起始於零）。

#### 回傳值

要求的 `File` 物件。

範例
--

此範例演示了迭代所有之使用者於 `<input>` 元素選取的檔案：


```js
// fileInput is an HTML input element: <input type="file" id="myfileinput" multiple>
var fileInput = document.getElementById("myfileinput");

// files is a FileList object (similar to NodeList)
var files = fileInput.files;
var file;

// loop through files
for (var i = 0; i < files.length; i++) {
  // get item
  file = files.item(i);
  //or
  file = files[i];

  alert(file.name);
}
```


以下是更完整的範例：


```html
<!doctype html>
<html>
  <head> </head>
  <body>
    <!--multiple is set to allow multiple files to be selected-->

    <input id="myfiles" multiple type="file" />
  </body>

  <script>
 var pullfiles = function () {
 // love the query selector
 var fileInput = document.querySelector("#myfiles");
 var files = fileInput.files;
 // cache files.length
 var fl = files.length;
 var i = 0;

 while (i < fl) {
 // localize file var in the loop
 var file = files[i];
 alert(file.name);
 i++;
 }
 };

 // set the input element onchange to call pullfiles
 document.querySelector("#myfiles").onchange = pullfiles;

 //a.t
 </script>
</html>
```

規範
--

* File upload state (HTML5 working draft)
參見
--

* 在網頁應用程式中使用本地檔案
* `File`
* `FileReader`
HTMLDocument
============

**`HTMLDocument`** 是一個關於 `DOM` 的抽象介面，提供了 `Document` (en-US) 定義之外的 XML 文件屬性及方法，以用來操作 HTML。

`window.document` 為 `HTMLDocument` 的物件實體，`HTMLDocument` 所有屬性與方法的說明已包含在 `Document` 頁面。由於現在的 `HTMLDocument` 是透過了綁定轉型（binding-specific casting）的方式來運作，所以 `HTMLDocument` 已不再是繼承 `Document`。

規範
--

* http://www.w3.org/TR/DOM-Level-2-HTM...ml#ID-26809268
Position
========

**`Position`** 介面表示在給定時間相關裝置的位置。這個位置用一個 `Coordinates` 物件表示，包括裝置在地球上的二維位置，以及裝置的海拔高度和速度。

屬性
--

*`Position` 介面沒有繼承任何屬性*

`Position.coords` Read only 

回傳一個定義當前位置的 `Coordinates` 物件。

`Position.timestamp` Read only 

回傳一個時間戳 `DOMTimeStamp` (en-US) ，這個時間戳表示獲取到位置的時間。

方法
--

**`Position 介面沒有實作或繼承任何方法`**

規格
--

| Specification |
| --- |
| Geolocation API # position\_interface |

瀏覽器的相容性
-------

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

請參考
---

* Using geolocation (en-US)
* `Geolocation` 介面使用此物件。
DOMParser
=========

**實驗性質:** **這是一個實驗中的功能 (en-US)**  
此功能在某些瀏覽器尚在開發中，請參考兼容表格以得到不同瀏覽器用的前輟。

`DOMParser可以將XML或是HTML格式的字串轉成`DOM 文件 (en-US). `DOMParser`的規格請參閱DOM 解譯與串流化.

請注意XMLHttpRequest解譯的是 URL 連結內容裡的 XML 與 HTML 文件.

產生一個 DOMParser
--------------

" `new DOMParser()" 可產生DOMParser`.

`關於如何在Firefox外掛程式中產生DOMParser,`請參考`nsIDOMParser文件`

解譯 XML
------

產生解譯物件後，請呼叫`parseFromString方法函式來將XML字串轉換成DOM物件`:


```js
var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
```

### 錯誤處理

請注意如果解譯過程出錯,目前的 `DOMParser` 不會丟出異常物件（exception），但是會回傳一個錯誤文件（請看 Firefox bug 45566）：


```xml
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">
(error description)
<sourcetext>(a snippet of the source XML)</sourcetext>
</parsererror>
```


解譯錯誤也會記錄在錯誤終端機中（Error Console）, 紀錄裡頭的文件 URI (如下) 則為錯誤來源.

解譯 SVG 或 HTML 文件
----------------

`DOMParser` 也可以用來解譯 SVG 文件或是 HTML 文件。可以依 MIME 格式，輸出三種不同格式. 如果 MIME 格式是 `text/xml`,輸出的格式為 `XMLDocument`, 如果 MIME 格式是 `image/svg+xml`, 輸出格式為 `SVGDocument,` 如果 MIME 格式是 `text/html`, 輸出格式則為 `HTMLDocument`.


```js
var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// returns a Document, but not a SVGDocument nor a HTMLDocument

parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// returns a SVGDocument, which also is a Document.

parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html");
// returns a HTMLDocument, which also is a Document.
```

### 其他瀏覽器可用的 DOMParser HTML 外掛程式


```js
/\*
 \* DOMParser HTML extension
 \* 2012-09-04
 \*
 \* By Eli Grey, http://eligrey.com
 \* Public domain.
 \* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 \*/

/\*! @source https://gist.github.com/1129031 \*/
/\*global document, DOMParser\*/

(function (DOMParser) {
  "use strict";

  var proto = DOMParser.prototype,
    nativeParse = proto.parseFromString;
  // Firefox/Opera/IE throw errors on unsupported types
  try {
    // WebKit returns null on unsupported types
    if (new DOMParser().parseFromString("", "text/html")) {
      // text/html parsing is natively supported
      return;
    }
  } catch (ex) {}

  proto.parseFromString = function (markup, type) {
    if (/^\s\*text\/html\s\*(?:;|$)/i.test(type)) {
      var doc = document.implementation.createHTMLDocument("");
      if (markup.toLowerCase().indexOf("<!doctype") > -1) {
        doc.documentElement.innerHTML = markup;
      } else {
        doc.body.innerHTML = markup;
      }
      return doc;
    } else {
      return nativeParse.apply(this, arguments);
    }
  };
})(DOMParser);
```

### DOMParser from Chrome/JSM/XPCOM/Privileged Scope

See article here: nsIDOMParser

瀏覽器相容性
------

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

參考資料
----

* Parsing and serializing XML (en-US)
* XMLHttpRequest
* XMLSerializer (en-US)
* Parsing HTML to DOM
FileReader
==========

藉由 `FileReader` 物件，Web 應用程式能以非同步（asynchronously）方式讀取儲存在用戶端的檔案（或原始資料暫存）內容，可以使用 `File` 或 `Blob` 物件指定要讀取的資料。

File 物件可以從使用者於 `<input>` (en-US) 元素選擇之檔案所回傳的 `FileList` 物件當中取得，或是來自拖放操作所產生的 `DataTransfer` (en-US) 物件之中，也能由 `HTMLCanvasElement` (en-US) 物件（元素物件）執行 `mozGetAsFile()` 方法後回傳。

**備註：** 此功能可在 Web Worker (en-US) 中使用

建構式
---

`FileReader()` (en-US)

建立新的 `FileReader` 物件。

請參考在網頁應用程式中使用本地檔案的更多細節與範例。

屬性
--

`FileReader.error` Read only 

此 `DOMException` (en-US) 類型的物件記錄了讀取資料時發生的錯誤資訊。

`FileReader.readyState` Read only 

表示目前 `FileReader` 狀態的數字，其代表的意義為：

|  |  |  |
| --- | --- | --- |
| `EMPTY` | `0` | 尚未讀入任何資料。 |
| `LOADING` | `1` | 正在讀入資料。 |
| `DONE` | `2` | 完成資料讀取。 |

`FileReader.result` (en-US) Read only 

讀入的資料內容。只有在讀取完成之後此屬性才有效，而資料的格式則取決於是由哪一個方法進行讀取。

### 事件處理器

`FileReader.onabort` (en-US)

`abort` 事件處理器，於讀取被中斷時觸發。

`FileReader.onerror` (en-US)

`error` (en-US) 事件處理器，於讀取發生錯誤時觸發。

`FileReader.onload` (en-US)

`load` (en-US) 事件處理器，於讀取完成時觸發。

`FileReader.onloadstart`

`loadstart` (en-US) 事件處理器，於讀取開始時觸發。

`FileReader.onloadend`

`loadend` (en-US) 事件處理器，於每一次讀取結束之後觸發（不論成功或失敗），會於 `onload` 或 `onerror` 事件處理器之後才執行。

`FileReader.onprogress`

`progress` (en-US) 事件處理器，於讀取 `Blob` 內容時觸發。


**備註：** `FileReader` 物件繼承自 `EventTarget`，其所有的事件也都能夠透過 `addEventListener` 方法來註冊事件監聽器。

方法
--

`FileReader.abort()` (en-US)

中斷目前的讀取，此方法回傳後屬性 `readyState` 將會是 `DONE`。

`FileReader.readAsArrayBuffer()` (en-US)

開始讀取指定的 `Blob`，讀取完成後屬性 `result` 將以 `ArrayBuffer` 物件來表示讀入的資料內容。

`FileReader.readAsBinaryString()` (en-US) 
非標準

開始讀取指定的 `Blob`，讀取完成後屬性 `result` 將以字串型式來表示讀入的原始二進位資料（raw binary data）。

`FileReader.readAsDataURL()` (en-US)

開始讀取指定的 `Blob`，讀取完成後屬性 `result` 將以 `data:` URL 格式（base64 編碼）的字串來表示讀入的資料內容。

`FileReader.readAsText()` (en-US)

開始讀取指定的 `Blob`，讀取完成後屬性 `result` 將以文字字串型式來表示讀入的資料內容。

規範
--

| Specification |
| --- |
| File API # APIASynch |

瀏覽器相容性
------

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

參見
--

* 在網頁應用程式中使用本地檔案
* `File`
* `Blob`
Vibration API
=============

目前大多數的行動裝置均具備振動硬體以搖晃裝置，讓軟體程式碼能對使用者產生實際反饋。**Vibration API** 即可讓 Web Apps 存取振動硬體。當然，若裝置並未支援振動硬體，就不會產生任何效果。

振動說明
----

振動即如「on-off」脈衝的形式，且持續時間亦有不同的變化。可透過單一整數讓振動持續數個毫秒 (ms)；或可由多個整數組成陣列，達到振動與暫停交錯的振動形式。只要單一 `window.navigator.vibrate()` (en-US) 函式即可控制振動。

### 單次振動

你可指定單一數值，或用單一數值構成 1 組陣列，讓振動硬體動作 1 次：


```js
window.navigator.vibrate(200);
window.navigator.vibrate([200]);
```


上列 2 個範例均可使裝置振動達 200 ms。

### 振動形式

用數值構成陣列，敘述裝置在一段期間內振動與停止振動的情形。陣列中的所有值均轉換為整數，接著直譯 (Interprete) 成裝置振動與停止振動的毫秒數。範例如下：


```js
window.navigator.vibrate([200, 100, 200]);
```


根據此陣列，裝置將振動 200 ms、暫停 100 ms，再振動 200 ms。

你可照自己喜好而指定多組振動/暫停的變化，且輸入項的數量為奇數或偶數均可。由於振動將在每個振動期間結束時停止，所以不一定要提供暫停數值作為最後 1 組輸入項。

### 取消目前振動

在 `window.navigator.vibrate()` (en-US) 的值為「0」、空白陣列，或陣列全為「0」時呼叫此函式，即可取消目前執行中的振動作業。`

規格
--

| Specification |
| --- |
| Vibration API (Second Edition) # dom-navigator-vibrate |

瀏覽器相容性
------

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

另可參閱
----

* `window.navigator.vibrate()`
WebSocket
=========

**實驗性質:** **這是一個實驗中的功能 (en-US)**  
此功能在某些瀏覽器尚在開發中，請參考兼容表格以得到不同瀏覽器用的前輟。

`WebSocket` 物件提供了建立、管理 WebSocket 伺服器連線的 API，它也有在連線中傳送、接收資料的能力。

方法一覽
----

| `void close(in optional unsigned long code, in optional DOMString reason);` |
| --- |
| `void send(in DOMString data);` |

屬性
--

| 屬性 | 形態 | 描述 |
| --- | --- | --- |
| `binaryType` | `DOMString` | 表示連線傳輸的二進制資料形態的字串，若使用 `Blob` 物件則為 "blob"，使用 `ArrayBuffer` 物件則為 "arraybuffer"。 |
| `bufferedAmount` | `unsigned long` | 呼叫 `send()` 隊列但尚未傳輸至網路上資料的位元數。連線關閉時此值不會重設為零。連續呼叫 `send()` 會讓此值不斷上升。**唯讀** |
| `extensions` | `DOMString` | 伺服器選擇的擴展。目前僅有空字串或表示資料經過壓縮的 "deflate-stream"。**唯讀** |
| `onclose` | `EventListener` | 當 WebSocket 連線的 `readyState` 切換至 `CLOSED` 時呼叫的事件監聽器。監聽器接收命名為 "close" 的 `CloseEvent`。 |
| `onerror` | `EventListener` | 當錯誤發生時呼叫的事件監聽器。事件為命名 "error" 的簡單事件。 |
| `onmessage` | `EventListener` | 當瀏覽器接收伺服器的訊息時呼叫的事件監聽器。監聽器接收命名為 "message" 的 `MessageEvent`。 |
| `onopen` | `EventListener` | 當 WebSocket 連線的 `readyState` 切換至 `OPEN` 時呼叫的事件監聽器，表示連線已準備傳送、接收資料。事件為命名 "open" 的簡單事件。 |
| `protocol` | `DOMString` | 伺服器選擇的子協定，這是建立 WebSocket 物件時 `protocols` 參數裡的其中一個字串。 |
| `readyState` | `unsigned short` | 連線的目前狀態，是就緒狀態常數的其中一個。**唯讀** |
| `url` | `DOMString` | 建構方法解析出來的 URL，總是絕對 URL。**唯讀** |

常數
--

### 就緒狀態常數

`readyState` 屬性使用以下常數描述 WebSocket 的連線狀態。

| 常數 | 值 | 描述 |
| --- | --- | --- |
| `CONNECTING` | `0` | 連線尚未打開。 |
| `OPEN` | `1` | 連線已打開，可以進行通訊。 |
| `CLOSING` | `2` | 連線正在進行關閉程序。 |
| `CLOSED` | `3` | 連線已關閉／連線不能打開。 |

方法
--

### close()

關閉 WebSocket 連線／連線嘗試，若連線已為 `CLOSED`，此方法沒有作用。
```

void close(
  in optional unsigned short code,
  in optional DOMString reason
);
```


#### 參數

`code` 選擇性

表示狀態代碼，狀態代碼用以解釋連線關閉的原因。若未指定參數，預設值為 1000（表示正常的「事務完結（transaction complete）」關閉）。請參考 `CloseEvent` 頁面的狀態代碼列表，有所有的合法值。

`reason` 選擇性

解釋連線關閉原因的人類可讀字串，字串必不可大於 123 個 UTF-8 字符。

#### 可丟例外

`INVALID_ACCESS_ERR`

指定不合法的 `code`。

`SYNTAX_ERR`

`reason` 字串太長或是含有未配對的代理對。

### send()

透過 WebSocket 連線傳輸資料至伺服器。
```

void send(
  in DOMString data
);

void send(
  in ArrayBuffer data
);

void send(
  in Blob data
);
```


#### 參數

`data`

要傳送至伺服器的字串。

#### 可丟例外

`INVALID_STATE_ERR`

目前連線不為 `OPEN`。

`SYNTAX_ERR`

資料為帶有未配對代理對的字串。

#### 註釋

**備註：** Gecko `send()` 方法的實作與 Gecko 6.0 的規範有差別。Gecko 回傳一個 `boolean` 以表示連線是否仍處於開啟狀態（且資料成功隊列／傳輸）。另外，此時此刻，Gecko 不支援 `ArrayBuffer` 或 `Blob` 作為資料形態。

參見
--

* 製作 WebSocket 客戶端應用程式
* HTML5: WebSockets
瀏覽器兼容
-----

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

當 WebSocket 連線關閉時，客戶端會收到一個 `CloseEvent`，由 `WebSocket` 物件 `onclose` 屬性表示的監聽器接收。

屬性
--

| 屬性 | 形態 | 描述 |
| --- | --- | --- |
| `code` | `unsigned long` | WebSocket 伺服器給予的連線關閉代碼。「狀態代碼」列有所有可能值。 |
| `reason` | `DOMString` | 表示伺服器關閉連線的原因，這因不同的伺服器與子協定而定。 |
| `wasClean` | `boolean` | 表示連線關閉情況是否乾淨。 |

狀態代碼
----

以下列有所有合法的狀態代碼。

| 狀態代碼 | 描述 |
| --- | --- |
| 0-999 | **尚未使用的保留值。** |
| 1000 | 正常關閉，連線成功地達到建立時的目標。 |
| 1001 | 端點去離，伺服器故障或是瀏覽器從開啟連線的頁面離去的情形。 |
| 1002 | 因協定錯誤造成連線被端點消滅。 |
| 1003 | 因端點接收不能處理的資料形態（舉例來說，文字端點收到二進制資料）而消滅連線。 |
| 1004 | 端點收到過大的資料幀而消滅連線。 |
| 1005 | **保留值**。表示意外地未給予狀態代碼的情形。 |
| 1006 | **保留值**。用以表示在預期收到狀態代碼的情形下不正常（即未送關閉幀）的連線關閉。 |
| 1007-1999 | **保留以作為未來的 WebSocket 標準之用。** |
| 2000-2999 | **保留以作為 WebSocket 擴展之用。** |
| 3000-3999 | 程式庫與框架使用的值，應用程式**可不**使用。 |
| 4000-4999 | 應用程式使用的值。 |

參見
--

* `WebSocket`
瀏覽器兼容
-----

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

**非標準:** This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

**`FileSystem`** 實作文件和目錄介面，描述一個檔案系統。在任何檔案系統上，這個物件包含 `filesystem` (en-US)的特性。某些網頁瀏覽器提供額外的 API 去創建和管理檔案系統，如 Google Chrome 的`requestFileSystem()`函式。

**備註：** 此介面並非標準 API, 代表規格並未依造標準制定, 因此必須注意並非所有網頁瀏覽器都有實作此介面, 有實作的網頁瀏覽器可能只有實作一小部分. 請在Browser compatibility 查看更多細節.

基礎概念
----

存取 `FileSystem` 物件的兩種方法:

1. 你可以直接要求一個使用`window.requestFileSystem()，`只用在你的網頁應用程式的沙盒類型 `FileSystem 物件。如果要求成功，將會執行`callback handler 去接收描述檔案系統的`FileSystem物件參數。`
2. 你可以從檔案系統接口物件取得，透過他的`filesystem` (en-US)特性
屬性
--

`FileSystem.name` (en-US) Read only 

`USVString` (en-US) 代表檔案系統的名稱. 此名稱在整個已宣告的檔案系統清單中是唯一的。

`FileSystem.root` (en-US) Read only 

`FileSystemDirectoryEntry` (en-US) 物件表示檔案系統的根目錄。 透過此物件, 你可以取得權限存取所有檔案系統中的文件和目錄

規範
--

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

This API has no official W3C or WHATWG specification.

瀏覽器相容性
------

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

參見
--

* File and Directory Entries API
* Introduction to the File System API (en-US)
* `FileSystemEntry` (en-US), `FileSystemFileEntry` (en-US), and `FileSystemDirectoryEntry` (en-US)
* MSDN 文章: WebKitFileSystem object
GainNode
========

`GainNode` 介面代表的是音量改變。 這是 `AudioNode` (en-US) 音訊處理模組，可以對輸入的訊號做增益 (gain) 後輸出。一個 `GainNode` 有一個輸入和一個輸出，兩者有相同的聲道數。

增益 (gain) 是無單位的數值，隨時間變化，會用來和所有輸入聲道的取樣做相乘。 如果更改的話，新的增益會用 de-zippering 演算法處理，以避免輸出聲音出現難聽的「喀」聲。

![The GainNode is increasing the gain of the output.](/zh-TW/docs/Web/API/GainNode/webaudiogainnode.png)


|  |  |
| --- | --- |
| Number of inputs | `1` |
| Number of outputs | `1` |
| Channel count mode | `"max"` |
| Channel count | `2` (not used in the default count mode) |
| Channel interpretation | `"speakers"` |

Constructor
-----------

`GainNode()` (en-US)

Creates a new instance of an GainNode object.

Properties
----------

*Inherits properties from its parent,* *`AudioNode` (en-US)*.

`GainNode.gain` Read only 

是 a-rate (en-US) `AudioParam` (en-US) ，代表增益值

Methods
-------

*No specific method; inherits methods from its parent,* *`AudioNode` (en-US)*.

Example
-------

See `BaseAudioContext.createGain()` (en-US) for example code showing how to use an `AudioContext` to create a `GainNode`.

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

| Specification |
| --- |
| Web Audio API # GainNode |

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

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

See also
--------

* Using the Web Audio API (en-US)
UIEvent
=======

**`UIEvent`** 介面是使用者介面的事件的基本型態。

`UIEvent` 是從 `Event` 衍伸過來。 雖然為了相容性，仍留著 `UIEvent.initUIEvent()` (en-US) 方法，建立 `UIEvent` 物件最好是選擇以 `UIEvent()` constructor 建立。

許多介面直接或間接繼承此介面，例如：`MouseEvent` (en-US)、`TouchEvent` (en-US)、`FocusEvent` (en-US)、`KeyboardEvent`、`WheelEvent`、`InputEvent` (en-US) 和 `CompositionEvent` (en-US)。

建構式
---

`UIEvent()`

建立一個 `UIEvent` 物件 。

屬性
--

*此介面亦繼承其父－－ `Event` 的屬性：*

`UIEvent.cancelBubble` (en-US) 
非標準

已棄用

Is a `Boolean` indicating whether the bubbling of the event has been canceled or not.

`UIEvent.detail` (en-US)Read only 

Returns a `long` with details about the event, depending on the event type.

`UIEvent.isChar` 
已棄用
 Read only 

Returns a `Boolean` indicating whether the event produced a key character or not.

`UIEvent.layerX` (en-US) 
非標準
 Read only 

Returns the horizontal coordinate of the event relative to the current layer.

`UIEvent.layerY` (en-US) 
非標準
 Read only 

Returns the vertical coordinate of the event relative to the current layer.

`UIEvent.pageX` (en-US) 
非標準
 Read only 

Returns the horizontal coordinate of the event relative to the whole document.

`UIEvent.pageY` (en-US) 
非標準
 Read only 

Returns the vertical coordinate of the event relative to the whole document.

`UIEvent.sourceCapabilities` (en-US) 
非標準
 Read only 

Returns an instance of the InputDeviceCapabilities interface which provides information about the physical device responsible for generating a touch event.

`UIEvent.view` (en-US)Read only 

Returns a `WindowProxy` that contains the view that generated the event.

`UIEvent.which` (en-US) 
非標準
 Read only 

Returns the numeric `keyCode` of the key pressed, or the character code (`charCode`) for an alphanumeric key pressed.

方法
--

*此介面亦繼承其父－－ `Event` 的方法：*

`UIEvent.initUIEvent()` (en-US) 
已棄用

初始化 `UIEvent` 物件。若該事件已經觸發的話，此方法就不會執行任何東西。

規範
--

| Specification |
| --- |
| UI Events # idl-uievent |

瀏覽器相容性
------

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

參見
--

* Introduction to events (en-US)
* `Event`
EventTarget
===========

**`EventTarget`** 介面定義了其實作的物件具有接收事件的能力，也可能擁有處理事件的監聽器。

除了最為常見的 `Element` (en-US)、`Document` (en-US) 與 `Window` (en-US) 繼承或實作了 `EventTarget` 介面之外，其它的物件還有 `XMLHttpRequest`、`AudioNode` (en-US)、`AudioContext` (en-US)⋯ 等等。

許多 `EventTarget`（包括 Element、Document 和 Window）除了透過 `addEventListener()` 方法外，還可藉由 `DOM` 物件的屬性（property）或 HTML 元素 (en-US)屬性（attribute）來設定事件處理器 (en-US)。

方法
--

`EventTarget.addEventListener()`

於 `EventTarget` 物件上註冊指定事件的監聽器。

`EventTarget.removeEventListener()` (en-US)

移除 `EventTarget` 物件上的指定事件監聽器。

`EventTarget.dispatchEvent()`

對此 `EventTarget` 物件派送（dispatch）一個事件物件，也就是於此 `EventTarget` 物件上觸發一個指定的事件物件實體。

### Mozilla chrome code 的額外方法

Mozilla extensions for use by JS-implemented event targets to implement on properties. See also WebIDL bindings.

* void **setEventHandler**(DOMString type, EventHandler handler) 
非標準
* EventHandler **getEventHandler**(DOMString type) 
非標準
範例
--

### Simple implementation of EventTarget


```js
var EventTarget = function () {
  this.listeners = {};
};

EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function (type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};

EventTarget.prototype.removeEventListener = function (type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback) {
      stack.splice(i, 1);
      return;
    }
  }
};

EventTarget.prototype.dispatchEvent = function (event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type];
  event.target = this;
  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};
```

規範
--

| Specification |
| --- |
| DOM Standard # interface-eventtarget |

瀏覽器相容性
------

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

參見
--

* Event reference - the events available in the platform.
* Event developer guide
* `Event` interface
FormData
========

**`FormData`** 介面可為表單資料中的欄位/值建立相對應的的鍵/值對（key/value）集合，之後便可使用 `XMLHttpRequest.send()` (en-US) 方法來送出資料。它在編碼類型設定為 `multipart/form-data` 時會採用與表單相同的格式送出。

實作 `FormData` 的物件可以直接利用 `for...of` (en-US) 語法結構來替代 `entries()` (en-US)：`for (var p of myFormData)` 等同於 `for (var p of myFormData.entries())`。

**備註：** 此特性適用於 Web Workers (en-US)。

建構式
---

`FormData()` (en-US)

建立一個新的 `FormData` 物件。

方法
--

`FormData.append()` (en-US)

追加新值到 `FormData` 物件已有的對應鍵上；若該鍵不存在，則為其追加新的鍵。

`FormData.delete()` (en-US)

刪除指定的鍵值對。

`FormData.entries()` (en-US)

回傳 `iterator`，可用來處理物件中所有的鍵值對。

`FormData.get()`

回傳指定的鍵在 `FormData` 物件中找到的第一個對應值。

`FormData.getAll()` (en-US)

回傳指定的鍵在 `FormData` 物件中所有對應值的陣列。

`FormData.has()` (en-US)

回傳 `FormData` 物件是否含有指定鍵值對的布林值。

`FormData.keys()` (en-US)

回傳 `iterator`，可用來處理物件中所有鍵值對之中的鍵。

`FormData.set()` (en-US)

為 `FormData` 物件已有的鍵設定新值；若該鍵不存在，則為其追加新的鍵。

`FormData.values()` (en-US)

回傳 `iterator`，可用來處理物件中所有鍵值對之中的值。

規範
--

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

瀏覽器相容性
------

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

參見
--

* `XMLHTTPRequest`
* 使用 XMLHttpRequest
* 使用 FormData 物件 (en-US)
* `<form>` (en-US)
權限 (Permissions)
================

摘要
--

Permissions API 可顯示 Apps 所要求的所有權限，以利使用者管理。Apps 可透過此 API 而讀取其他 Apps 的權限並進一步變更。

透過 `PermissionSettings` 介面的 `navigator.mozPermissionSettings` 屬性，即可存取 Permission Manager。

已安裝 Apps 的權限
------------

所有 Apps 均需透過自己的 manifest 檔案而要求權限。Apps 每次所使用的 API，均以「請求顯性權限 (Explicit Permission)」的 API 為主，並提示使用者是否通過權限。如果使用者選擇「不要再提示」，大概也就不太可能改變決定了。API 則能提供介面，以利使用者管理已發出的權限。

透過 `PermissionSettings.get()`、`set()`、`isExplicit()` 函式即可達到上述作業。

### 讀取權限

若要知道已發出權限的目前狀態，可使用 `PermissionSettings.get()` 函式。此函式可回傳字串，以顯示特定 Apps 權限的目前狀態。可能的數值有：

`allow`

已通過該權限，且不需使用者的進一步互動。

`denied`

已否決該權限；可能是系統或使用者所否決。

`prompt`

代表該權限將以明顯的提示方法，詢問使用者是否給予權限。

`unknown`

代表該 Apps 並未詢問此權限，也不會提示使用者是否給予權限。


```js
// Let's check all installed apps
var apps = navigator.mozApps.mgmt.getAll();

apps.onsuccess = function () {
  var permission = navigator.mozPermissionSettings;

  // Let's check the permission of each app
  apps.result.forEach(function (app) {
    var request,
      appName = app.manifest.name;

    for (request in app.manifest.permission) {
      // Let's get the current permission for each permission request by the application
      var p = permission.get(request, app.manifestUrl, app.origine, false);

      console.log(
        appName +
          ' asked for "' +
          request +
          '" permission, which is "' +
          p +
          '"',
      );
    }
  });
};
```

### 設定權限

只要使用 `PermissionSettings.set()` 函式即可設定權限。可能的數值均與 `get` 函式所存取的相同。

**備註：** 根據 Apps 權限的不同，某些可能為隱性 (Implicit) 權限。若因為某種理由，Apps 嘗試將權限變更為隱性權限，就會產生錯誤。為了避免這種錯誤，可透過 `PermissionSettings.isExplicit()` 函式而檢查是否為顯性權限。


```js
// Let's check all installed apps
var apps = navigator.mozApps.mgmt.getAll();

apps.onsuccess = function () {
  var permission = navigator.mozPermissionSettings;

  // Let's grant the permission of each app
  apps.result.forEach(function (app) {
    var request, appName = app.manifest.name;

    for (request in app.manifest.permission) {
      // If the permission is not explicit
      if (!permission.isExplicit(request, app.manifestUrl, app.origine, false) {
        // Let's ask the user for all permissions requested by the application
        permission.set(request, app.manifestUrl, app.origine, false);
      }
    }
  });
}
```

規格
--

不屬於任何規格。

另可參閱
----

* `navigator.mozPermissionSettings`
* `PermissionSettings`
MessageEvent
============

當伺服器傳來資料時，客戶端會收到一個 `MessageEvent`，由 `WebSocket` 物件 `onmessage` 表示的監聽器接收。

屬性
--

| 屬性 | 形態 | 描述 |
| --- | --- | --- |
| `data` | `DOMString` | `Blob` | `ArrayBuffer` | 伺服器傳來的資料。 |

規範
--

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

瀏覽器兼容
-----

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

參見
--

* `WebSocket`