XMLHttpRequest は、クライアントとサーバーの間でデータを伝送するための機能をクライアント側で提供する API です。ページ全体を再読み込みすることなく、URL からデータを読み出す簡単な方法を提供します。この API によって、ユーザの作業を中断させることなく Web ページの一部を更新することができます。 XMLHttpRequestAJAX プログラミングで多く使用されます。

XMLHttpRequest は Microsoft によって設計され、Mozilla、Apple および Google が採用しました。現在は WHATWG によって標準化されていますXMLHttpRequest という名前ではあるものの、XML に限らないデータ形式を取り扱うことができ、(file および ftp を含む) HTTP 以外のプロトコルもサポートしています。

構文

var myRequest = new XMLHttpRequest();

XMLHttpRequest の使い方の詳細については、XMLHttpRequest の利用を参照してください。

メソッド

XMLHttpRequest(JSObject objParameters);
void abort();
DOMString getAllResponseHeaders();
DOMString? getResponseHeader(DOMString header);
void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);
void overrideMimeType(DOMString mime);
void send();
void send(ArrayBuffer data);
void send(ArrayBufferView data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
void setRequestHeader(DOMString header, DOMString value);
非標準メソッド
[noscript] void init(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow);
[noscript] void openRequest(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password);
void sendAsBinary(in DOMString body); 非推奨 Gecko 31

プロパティ

このインターフェイスは、XMLHttpRequestEventTarget および EventTarget のプロパティを継承します。

XMLHttpRequest.onreadystatechange
readyState 属性が変更する都度呼び出される EventHandler。コールバック関数はユーザーインターフェーススレッドから呼び出されます。
警告: このプロパティはネイティブコードから使用してはいけません。また、同期リクエストとともに利用するべきでもありません。
XMLHttpRequest.readyState 読取専用
リクエストの状態を unsigned short 型の値で返します:
状態 説明
0 UNSENT open() がまだ呼び出されていない。
1 OPENED send() がまだ呼び出されていない。
2 HEADERS_RECEIVED send() が呼び出され、ヘッダーとステータスが通った。
3 LOADING ダウンロード中。responseText は断片的なデータを保持している。
4 DONE 一連の動作が完了した。
XMLHttpRequest.response 読取専用
ArrayBufferBlobDocument、JavaScript オブジェクト、DOMString といった XMLHttpRequest.responseType に従ったレスポンスの実体ボディ。リクエストが完了していない、または成功しなかった場合、この値は null となります。
XMLHttpRequest.responseText 読取専用
リクエストに対するテキスト形式でのレスポンスを含む DOMString を返します。リクエストの失敗または未送信の場合は null となります。
XMLHttpRequest.responseType
レスポンス型を定義する、列挙型の値です。以下の値を使用できます:
response プロパティのデータ型
"" DOMString (デフォルト値)
"arraybuffer" ArrayBuffer
"blob" Blob
"document" Document
"json" サーバーが返してきた JSON 文字列をパースした JavaScript オブジェクト
"text" DOMString
"moz-blob" progress イベントから断片的な Blob を取り出せるようにするため、Firefox で使用する値。データの受信中であっても、progress イベントハンドラでデータの処理を開始できます。
"moz-chunked-text"

"text" に似ていますが、こちらはストリーミングです。response の値は "progress" イベントの発生中に限り使用でき、直前の "progress" イベント以降に受信したデータのみ含みます。

"progress" イベントの途中で response にアクセスすると、response には文字列およびデータが含まれています。それ以外の場合は null が返ります。

現在、このモードは Firefox に限り動作します。

"moz-chunked-arraybuffer"

"arraybuffer" に似ていますが、こちらはストリーミングです。response の値は "progress" イベントの発生中に限り使用でき、直前の "progress" イベント以降に受信したデータのみ含みます。

"progress" イベントの途中で response にアクセスすると、response には文字列およびデータが含まれています。それ以外の場合は null が返ります。

現在、このモードは Firefox に限り動作します。

註: Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) より WebKit build 528 と同様に、同期リクエストの実行中に responseType 属性を使用できなくなりました。属性の使用を試みると、NS_ERROR_DOM_INVALID_ACCESS_ERR 例外が発生します。この変更は、W3C へ標準化の提案が行われました。

XMLHttpRequest.responseXML 読取専用 読取専用
リクエストに対する、DOM Document オブジェクト形式のレスポンスです。リクエストが完了していない、成功しなかった、もしくは XML または HTML としてパースに失敗した場合、この値は null となります。レスポンスは text/xml ストリームとしてパースされます。responseType"document" に設定しており、またリクエストを非同期に実行した場合は、レスポンスを text/html ストリームとしてパースします。
註: サーバーが text/xml Content-Type ヘッダを付与していない場合、overrideMimeType() を用いることで、 XMLHttpRequest に強制的に XML としてパースさせることができます。
XMLHttpRequest.status 読取専用
リクエストに対するレスポンスのステータスを unsigned short 型の値で返します。この値は HTTP リザルトコードとなります (例えばリクエストに成功した場合、status は 200 となります)。
XMLHttpRequest.statusText 読取専用
HTTP サーバーから返ってきたレスポンス文字列を DOMString 型の値で返します。XMLHTTPRequest.status とは異なり、("200 OK" のように) レスポンスメッセージの完全な文が含まれています。
XMLHttpRequest.timeout
リクエストを自動的に終了できるようになるまでの時間をミリ秒単位で表す、unsigned long 型の値です。値 0 (デフォルト値) は、タイムアウトしないことを示します。
註: 自身の window で、同期リクエスト向けにタイムアウトを使用することはできません。
非同期リクエストでタイムアウトを使用する
XMLHttpRequestEventTarget.ontimeout
リクエストがタイムアウトする都度呼び出される EventHandler
XMLHttpRequest.upload 読取専用
アップロードプロセスを表す XMLHttpRequestUpload。これは不透過オブジェクトですが、XMLHttpRequestEventTarget イベントリスナを加えることにより、アップロードプロセスを追跡することができます。
XMLHttpRequest.withCredentials
クロスサイト Access-Control リクエストに cookie や認証ヘッダといった認証情報を使用させるかを示す Boolean 型の値です。
またこのフラグは、リクエストで cookie を無視することを示すためにも使用します。
デフォルト値は false です。
註: 同一サイトでのリクエストに影響を与えることはありません。
註: Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) より、同期リクエストの実行中に withCredentials 属性を使用できません。属性の使用を試みると、NS_ERROR_DOM_INVALID_ACCESS_ERR 例外が発生します。
註: Access-Control- ヘッダの値に関わらず、リクエストを実行する前に withCredentialstrue に設定しなければ、異なるドメインからの XmlHttpRequest のレスポンスに自ドメイン向けの cookie の値を設定することはできません

非標準プロパティ

属性 説明
channel 読取専用 nsIChannel リクエストの実行の際にオブジェクトによって使われるチャンネルです。チャンネルが作成されていない場合、この値は null となります。マルチパート・リクエストにおいてこの値は、マルチパート・リクエスト中の別々のパートではなく、最初のチャンネルとなります。アクセスには昇格された権限が必要です。
mozAnon 読取専用 boolean

true である場合、リクエストは cookie や認証ヘッダを伴わずに送信します。

mozSystem 読取専用 boolean

true である場合、リクエストで同一オリジンポリシーは適用されません。

mozBackgroundRequest boolean

このプロパティは Web content で使用できません。アクセスには昇格された権限が必要です。

オブジェクトがバックグラウンドサービスのリクエストであるかどうかを示します。true である場合、リクエストに関連した読み込みグループは無く、セキュリティダイアログのユーザーへの表示が防止されます。

この場合において、(認証や不正な証明書の通知といった) セキュリティダイアログが通常通り表示されたのであれば、単純にリクエストが失敗したことを意味します。

註: このプロパティは、open() を呼び出す前に設定しなければなりません。
mozResponseArrayBuffer 廃止 Gecko 6 読取専用 ArrayBuffer リクエストに対する、JavaScript typed array 形式でのレスポンス。この値が NULL である場合、リクエストが成功しなかった、またはリクエストがまだ送信されていないかもしれません。
multipart 廃止 Gecko 22 boolean

これは Gecko 独自の機能であり、Firefox/Gecko 22 で削除しました。代わりに Server-Sent EventsWeb Sockets、または progress イベントの responseText を使用してください。

レスポンスが複数の XML 文書のストリームになることが予想されるかどうかを表します。true が設定された場合、最初のレスポンスのコンテンツタイプが multipart/x-mixed-replace でなければエラーが発生するでしょう。すべてのリクエストは非同期でなければなりません。

これによりサーバーからのプッシュ通信が可能になります。ひとつひとつの XML document を、このリクエスト形式で記述することにより、ドキュメントが送られてくる都度、新たな XML DOM document が生成され、onload ハンドラが呼び出されます。

註: true に設定された場合、最初の XMLdocument が読み込まれて以降、onload ハンドラと他のイベントハンドラはリセットされません。そして以後、レスポンスの断片を受け取る度に onload ハンドラが呼び出されることとなります。

コンストラクタ

XMLHttpRequest()

XMLHttpRequest を生成するコンストラクタです。これは、他のメソッドを呼び出す前に呼び出さなければなりません。

Gecko/Firefox 16 で、anonymous モードを有効化できる非標準のパラメータをコンストラクタに追加しました (バグ 692677 をご覧ください)。mozAnon フラグを true に設定すると、XMLHttpRequest 仕様に記載されている AnonXMLHttpRequest() コンストラクタに事実上似たものになります。なお、これはどのブラウザでも未実装です (2012 年 9 月現在)。

XMLHttpRequest (
  JSObject objParameters
);
引数 (非標準)
objParameters
2 つのフラグを設定できます:
mozAnon
Boolean: true に設定すると、リソースを読み込む際にブラウザはオリジンやユーザクレデンシャルを公開しません。さらに重要なこととして、明示的に setRequestHeader を使用しなければ cookie を送信しません。
mozSystem
Boolean: true に設定すると、サーバーに CORS の使用のオプトインを要求することなくクロスサイト接続を許可します。mozAnon: true の設定が必要です。すなわち、cookies やユーザクレデンシャルと組み合わせて送信することはできません。これは privileged (reviewed) アプリのみで動作します。Firefox で読み込む任意の Web ページでは動作しません。

メソッド

abort()

リクエストがすでに送信されている場合、リクエストを中止します。

getAllResponseHeaders()

DOMString getAllResponseHeaders();

CRLF で区切られた文字列として、すべてのレスポンスヘッダを返します。レスポンスを何も受け取らなかった場合は null を返します。註: マルチパートリクエストでは、オリジナルのチャンネルではなく、リクエストの現在のパートのヘッダを返します。

getResponseHeader()

DOMString? getResponseHeader(DOMString header);

指定したヘッダ文を含む文字列を返します。レスポンスを受信していない、またはレスポンス中に指定したヘッダが存在しない場合は null を返します。同じ名前で複数のレスポンスヘッダが存在する場合はひとつに連結された文字列として値が返り、それぞれの値はカンマと空白で前の値と区切られます。getResponseHeader() メソッドは、UTF バイトシーケンスで値を返します。

open()

リクエストを初期化します。このメソッドは JavaScript から使用するようにしてください。ネイティブコードからの初期化には、代わりに openRequest() を使用するようにしてください。

註: 既にアクティブなリクエストがある状況 (open() または openRequest() が既に呼び出された状況) で、このメソッドを呼び出した場合、abort() を呼び出すのと等価となります。
void open(
   DOMString method,
   DOMString url,
   optional boolean async,
   optional DOMString user,
   optional DOMString password
);
引数
method
使用する HTTP メソッド。"GET"、"POST"、"PUT"、"DELETE" など。HTTP(S) URL でない場合は無視されます。
url
リクエストを送信する URL
async
非同期で操作を実行するかを示す、オプションの真偽値です。デフォルトでは true に設定されています。false が設定されている場合、send() メソッドはレスポンスを受信するまで返しません。true が設定されている場合、トランザクションが完了した通知は、イベントリスナによって提供されます。multipart 属性が true である、または例外が投げられるであろう場合、この値は trueなければなりません
註: Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27) よりメインスレッドでの同期リクエストは、ユーザエクスペリエンスに悪影響があるため非推奨になりました。
user
認証を目的として使用される、ユーザー名のオプションです。デフォルトでは、空の文字列となっています。
password
認証を目的として使用される、パスワードのオプションです。デフォルトでは、空の文字列となっています。

overrideMimeType()

サーバーから返ってくる MIME タイプを上書きします。例えば、サーバーの返す MIME タイプに関わらず、強制的に text/xml としてストリームをパースするなどの用途に使えるでしょう。このメソッドは send() が呼び出される前に呼び出す必要があります。

void overrideMimeType(DOMString mimetype);

send()

リクエストを送信します。非同期リクエストの場合 (デフォルトの場合ですが)、メソッドはリクエストを送信して間もなく返ります。同期リクエストの場合、このメソッドはレスポンスが到着するまで返りません。

註: send() を呼び出す前に、イベントリスナを設定する必要があります。
註: ArrayBuffer を引数として使用しなくなったことに注意してください。これは XMLHttpRequest の仕様に含まれていません。代わりに ArrayBufferView を使用してください (バージョン情報は、ブラウザ互換性の一覧表を参照してください)。
void send();
void send(ArrayBuffer data);
void send(ArrayBufferView data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
脚注

dataDocument である場合、送信の前にシリアライズされます。Document を送信するとき、Firefox 3 までのバージョンでは常に UTF-8 エンコーディングを用いてリクエストが送信されます。Firefox 3 では、正確に body.xmlEncoding で指定されている、またはエンコードの指定が無い場合は UTF-8 を用いてエンコードされたドキュメントを送信します。

datansIInputStream の場合、nsIUploadChannelsetUploadStream() メソッドと互換性が無ければなりません。その場合、リクエストの Content-Length ヘッダに nsIInputStreamavailable() メソッドを用いて取得された値が設定されます。メッセージ本文の一部として扱われるストリームの最初には、あらゆるヘッダが含まれます。ストリームの MIME タイプは、send() よりも先に呼び出した setRequestHeader() メソッドを用いて設定された Content-Type ヘッダが指定されるはずです。

バイナリコンテンツを送信する (ファイルのアップロードなど) 最良の方法は、ArrayBufferView または Blobssend() メソッドを組み合わせることです。ただし、文字列変換が可能なデータを送信したい場合は、代わりに sendAsBinary() メソッドまたは StringView Non native typed array スーパークラスを使用してください。

setRequestHeader()

HTTP リクエストヘッダの値を設定します。setRequestHeader()open() の後、およびsend() の前に呼び出さなくてはいけません。同じヘッダについてこのメソッドを複数回呼び出した場合は、値がひとつのリクエストヘッダに統合されます。

void setRequestHeader(
   DOMString header,
   DOMString value
);

セキュリティ上の理由から、一部のヘッダはユーザエージェントのみ制御できます。このようなヘッダは forbidden header namesforbidden response header names に含まれています。

引数
header
設定されるヘッダーの名前。
value
設定されるヘッダーの本文の値。

非標準メソッド

init()

C++ コードから使用するために、オブジェクトを初期化します。

警告: JavaScript からこのメソッドを呼び出してはいけません
[noscript] void init(
  in nsIPrincipal principal,
  in nsIScriptContext scriptContext,
  in nsIGlobalObject globalObject,
  in nsIURI baseURI,
  [optional] in nsILoadGroup loadGroup
);
引数
principal
レスポンスに用いる principalnull は禁止されています。
scriptContext
リクエストに用いたスクリプトコンテクスト。null は禁止されています。
globalObject
リクエストでグローバルオブジェクトとして使用するオブジェクト。通常、これは Window ですが、サンドボックスやバックステージパスにすることもできます。null にすることもできますが、リクエストが document を生成できなくなります。なお Firefox 23 より前のバージョンでは、常に Window でした。
baseURI
リクエストを扱う際に、相対 URI を解決するために使用するベース URI。null にすることができます。
loadGroup Optional Gecko 37 が必要
リクエストを実行する際に使用する読み込みグループであり、省略可能です。ここで指定したグループは、読み込みグループががすでに存在する window がグローバルであっても使用します。

openRequest()

リクエストを初期化します。このメソッドはネイティブコードから使用するようにしてください。JavaScript コードからの初期化には、代わりに open() を使用するようにしてください。open() の項目を参照してください。

sendAsBinary()

非推奨 Gecko 31

バイナリデータを送る、send() メソッドの亜種です。

註: この非標準メソッドは Gecko 31 (Firefox 31 / Thunderbird 31 / SeaMonkey 2.28) から非推奨とされており、削除する予定です。代わりに、標準化されたメソッドである send(Blob data) を使用できます。
void sendAsBinary(
   in DOMString body
);

このメソッドを FileReader API の readAsBinaryString メソッドと組み合わせて使用すると、任意の種類のファイルの読み込みおよびアップロード や生データの stringify が可能になります。

引数
body
DOMstring 形式のリクエスト本体です。このデータは切り捨て処理 (それぞれの文字の上位バイトを削除) によって 1 バイト文字の文字列に変換されます。
sendAsBinary() のポリフィル

sendAsBinary() は実験的な機能であるため、sendAsBinary()サポートしないtyped arrays をサポートするブラウザ向けのポリフィルを示します。

/*\
|*|
|*|  :: XMLHttpRequest.prototype.sendAsBinary() Polyfill ::
|*|
|*|  https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#sendAsBinary()
|*|
\*/

if (!XMLHttpRequest.prototype.sendAsBinary) {
  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
    var nBytes = sData.length, ui8Data = new Uint8Array(nBytes);
    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
    }
    /* send as ArrayBufferView...: */
    this.send(ui8Data);
    /* ...or as ArrayBuffer (legacy)...: this.send(ui8Data.buffer); */
  };
}
註: send() の引数として 2 種類のデータを渡す形でポリフィルを構築できます。ArrayBuffer (ui8Data.buffer – コメントアウトされているコード) または ArrayBufferView (ui8Data、これは 8 ビット符号なし整数値の typed array – コメントアウトしていないコード) です。しかし Google Chrome では ArrayBuffer を送信しようとすると、ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. という警告メッセージが表示されます。この他に、StringView Non native typed arrays スーパークラスと send() メソッドを組み合わせてバイナリデータを送信する方法があります。

  • デフォルトでは、Firefox 3 では XMLHttpRequest のサーバー毎の接続数は 6 つずつに制限されています (それ以前のバージョンではこの値はサーバーごとに 2 つずつでした)。いくつかのインタラクティブな Web サイトでは XMLHttpRequest の接続を開いたままにしており、そうしたサイトでは複数のセッションが開かれているために、ウィンドウの再描画が行われなかったり操作に反応しなくなるなど、ブラウザが応答しなくなるかもしれません。この値は about:config 内の network.http.max-persistent-connections-per-server の設定を編集することにより変更が可能です。
  • Gecko 7.0 より、setRequestHeader() によって設定されるヘッダーが、リダイレクト時にもリクエストとともに送信されるようになりました。以前では、これらのヘッダーが送信されることはありませんでした。
  • XMLHttpRequest は Gecko に於いて nsIXMLHttpRequestnsIXMLHttpRequestEventTarget、および nsIJSXMLHttpRequest インターフェースを用いて実装されています。
  • リクエストがタイムアウトしたときに、"timeout" イベントが発生します。

イベント

XMLHttpRequest インスタンスのプロパティとして、onreadystatechange がすべてのブラウザでサポートされています。

後に、多くのブラウザでは追加でイベントハンドラがいくつもサポートされてきました (onloadonerroronprogress など)。これらは Firefox でもサポートされています。詳細は、nsIXMLHttpRequestEventTarget および XMLHttpRequest の利用を参照してください。

Firefox を含む最近のブラウザでは、XMLHttpRequest のイベントを監視する方法として、on* プロパティにハンドラ関数を設定する方法に加え、標準のイベントの addEventListener API を使用してイベントを監視する方法が提供されています。

許可設定

例えば Firefox OS のアプリなど、mozSystem プロパティを通してシステム XHR を使用する際は、マニフェストファイルに systemXHR の許可設定を追加しなければなりません。システム XHR は privileged または certified アプリで使用できます。

"permissions": {
    "systemXHR":{}
}

仕様

仕様書 策定状況 コメント
XMLHttpRequest 現行の標準 WHATWG living standard

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
基本サポート (XHR1) 1 1.0 (1.7 or earlier)[1] 5[2]
7
(有) 1.2
send(ArrayBuffer) 9 9.0 (9.0) 10 11.60 ?
send(ArrayBufferView) 22 20.0 (20.0) ? ? ?
send(Blob) 7 3.6 (1.9.2) 10 12 ?
send(FormData) 6 4.0 (2.0) 10 12 ?
sendAsBinary(DOMString) 未サポート[3] 2.0 (1.8.1) 未サポート 未サポート 未サポート
response 10 6.0 (6.0) 10 11.60 (有)
responseType = 'arraybuffer' 10 6.0 (6.0) 10 11.60 (有)
responseType = 'blob' 19 6.0 (6.0) 10 12 (有)
responseType = 'document' 18 11.0 (11.0) 10 未サポート 6.1
responseType = 'json' 31 10.0 (10.0) 未サポート 12[4]
未サポート 16
17
(有)
Progress イベント 7 3.5 (1.9.1) 10 12 (有)
withCredentials 3 3.5 (1.9.1) 10 12 4
timeout 29.0[5] 12.0 (12.0) 8 12[6]
16
(有)
responseType = 'moz-blob' 未サポート 12.0 (12.0) 未サポート 未サポート 未サポート
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
基本サポート ? 1.0 (有) ? ? ?
send(ArrayBuffer) ? ? ? ? ?
send(ArrayBufferView) ? ? ? ? ?
send(Blob) ? ? ? ? ?
send(FormData) ? ? ? ? ?
sendAsBinary(DOMString) ? ? ? ? ?
response ? ? ? ? ?
responseType = 'arraybuffer' ? ? ? ? ?
responseType = 'blob' ? ? ? ? ?
responseType = 'document' ? ? ? ? ?
responseType = 'json' ? ? ? ? ?
Progress イベント ? ? ? ? ?
withCredentials ? ? ? ? ?
timeout ? ? ? ? ?
responseType = 'moz-blob' ? ? ? ? ?

[1] Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8) で、同期リクエストの実行時における responseType および withCredentials 属性の使用のサポートを廃止しました。属性の使用を試みると、NS_ERROR_DOM_INVALID_ACCESS_ERR 例外が発生します。この変更は、W3C へ標準化の提案が行われました。

Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9) 以降で、data: URL の読み込みで XMLHttpRequest をサポートしました。

Gecko 20.0 (Firefox 20.0 / Thunderbird 20.0 / SeaMonkey 2.17) で、ArrayBufferView の送信をサポートしました。ArrayBuffer の送信は XMLHttpRequest 仕様に含まれおらず、非推奨として扱うべきです。

[2] この機能は ActiveXObject() により実装していました。Internet Explorer 7 より、標準の XMLHttpRequest を実装しています。

[3] sendAsBinary() をサポートするポリフィルを使用できます。

[4] Blink/Chromium に切り替える前の Opera は、Opera 12 から 15 まで responseType=json をサポートしていました。後に、Blink (Opera 17) で再び実装されました。

[5] この機能は bug 231959 で実装しました。

[6] how to set and handle timeouts をご覧ください。

関連情報

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: atotto, yyss, Hixhi, ethertank, saneyuki_s, torinome, Electrolysis, Mgjbot, Hfjapancom, Okome
 最終更新者: atotto,