Proxy
Proxy.js は XMLHttpRequest に類似の I/F をもつ HTTP/FILE アクセス用のモジュールです。
基本的な利用方法は、XMLHttpRequest を踏襲していますが、onreadystatechange などの DOM Lv0 スタイルのイベントハンドラはサポートしていません。
NodeProxy.js も参照してください。
以下の機能を利用できます。
Android 2.3 や IE 9 などの数世代前の古いブラウザでは XHRLv1 しか利用できません。 can i use を参照してください。
function and property | Proxy.js XHRLv2 対応ブラウザ |
Proxy.js XHRLv1 対応ブラウザ |
NodeProxy.js |
---|---|---|---|
getAllResponseHeaders() | ◯ | ◯ | ◯ |
getResponseHeader() | ◯ | ◯ | ◯ |
open("GET") | ◯ | ◯ | ◯ |
open("GET", "http://example.com/") | ◯ | ◯ | ◯ |
open("GET", "file:///...") | ◯ | ◯ | ◯ |
open("GET", "/Users/...") | ◯ | ||
open("GET", "./dir/index/html") | ◯ | ◯ | ◯ |
open("POST") | ◯ | ◯ | |
overrideMimeType() | ◯ | ◯ | |
send() | ◯ | ◯ | ◯ |
send(data) | ◯ | ◯ | |
setRequestHeader() | ◯ | ◯ | ◯ |
addEventListener() | ◯ | ◯ | ◯ |
removeEventListener() | ◯ | ◯ | ◯ |
clearEventListener() | ◯ | ◯ | ◯ |
on() | ◯ | ◯ | ◯ |
off() | ◯ | ◯ | ◯ |
readyState | ◯ | ◯ | ◯ |
responseType = "arraybuffer" | ◯ | ByteArray を返します | ByteArray を返します |
responseType = "blob" | ◯ | ByteArray を返します | ByteArray を返します |
responseType = "document" | ◯ | ◯ | |
responseType = "json" | ◯ | ◯ | ◯ |
responseType = "text" | ◯ | ◯ | ◯ |
responseText | ◯ | ◯ | ◯ |
responseXML | ◯ | ◯ | |
status | ◯ | ◯ | ◯ |
statusText | ◯ | ◯ | |
upload | ◯ | ||
withCredentials | ◯ | ||
onreadystatechange | |||
onprogress | |||
onloadstart | |||
onload | |||
onloadend | |||
onerror |
new Proxy() は Proxy のインスタンスを返します。
var proxy = new Proxy();
proxy.on("load", function(event) { // { event: "load" }
console.log(this.responseText);
});
proxy.open("GET", "http://example.com/");
proxy.send();
Proxy#get(url:URLString, callback:Function):this は、GET リクエストを行うコンビニエンスメソッドです。
function Proxy_get(url, // @arg URLString:
callback) { // @arg Function: callback(error, responseText, xhr):void
// @ret this:
var proxy = new Proxy();
proxy["on"]("load", function() {
if ( (this["status"] === 0 && /^file\:/.test(url)) ||
(this["status"] >= 200 && this["status"] < 300) ) {
callback(null, this["responseText"], this);
} else {
callback(new Error(this["status"]), "", this);
}
});
proxy["open"]("GET", url);
proxy["send"]();
return this;
}
var proxy = new Proxy();
proxy.get("http://example.com/", function(error, responseText, xhr) {
console.log(this.responseText);
});
Proxy#addEventListener(type:EventTypeString, callback:Function):this はイベントハンドラを登録します。
登録可能なイベントは、"loadstart", "load", "loadend", "progress", "readystatechange", "error" です。
全く同一の type と callback の組み合わせを複数登録しても、一度しかコールバックしません。
function Proxy_addEventListener(type, // @arg EventTypeString: "readystatechange"
callback) { // @arg Function:
// @ret this:
// @help: Proxy#addEventListener
this._event.add(this._lv >= 2 ? this._xhr : null, type, callback);
return this;
}
Proxy#removeEventListener(type:EventTypeString, callback:Function):this は Proxy#addEventListener で登録済みのイベントハンドラを削除します。
function Proxy_removeEventListener(type, // @arg EventTypeString: "readystatechange"
callback) { // @arg Function:
// @ret this:
// @help: Proxy#removeEventListener
this._event.remove(this._lv >= 2 ? this._xhr : null, type, callback);
return this;
}
Proxy#clearEventListener():this は Proxy#addEventListener で登録済みのイベントハンドラを全て削除します。
function Proxy_clearEventListener() { // @ret this:
// @help: Proxy#clearEventListener
this._event.clear(this._lv >= 2 ? this._xhr : null);
return this;
}
Proxy#on は、Proxy#addEventListener の別名です。
## Proxy.prototype.offProxy#off は、Proxy#removeEventListener の別名です。