Skip to content
uupaa edited this page May 12, 2014 · 8 revisions

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

Proxy

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.prototype.get

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.prototype.addEventListener

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.prototype.removeEventListener

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.prototype.clearEventListener

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.prototype.on

Proxy#on は、Proxy#addEventListener の別名です。

## Proxy.prototype.off

Proxy#off は、Proxy#removeEventListener の別名です。

Clone this wiki locally