XMLHttpRequestでWebDAV
XMLHttpRequestでWebDAVもつかえるっぽい。
WebDAVをサポートしているオンラインファイルストレージがあれば、HTMLを置くだけでファイルブラウザとしても使える。
var req = createXMLHttpRequest(); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status==207) { //... } } }; req.open('PROPFIND', '/', true); req.setRequestHeader('Depth', '1'); req.send('<?xml version="1.0" ?><propfind xmlns="DAV:"><allprop/></propfind>');
PROPFINDリクエストの結果として、ディレクトリの中身のXMLレスポンスが返って来る。
例:
<?xml version="1.0" encoding="utf-8"?> <D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:"> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/"> <D:href>/</D:href> <D:propstat> <D:prop> <lp1:resourcetype><D:collection/></lp1:resourcetype> <lp1:creationdate>2006-08-18T17:47:26Z</lp1:creationdate> <lp1:getlastmodified>Fri, 18 Aug 2006 17:47:26 GMT</lp1:getlastmodified> <lp1:getetag>"118012-1000-5a772780"</lp1:getetag> <D:getcontenttype>text/html</D:getcontenttype> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/"> <D:href>/js/</D:href> <D:propstat> <D:prop> <lp1:resourcetype><D:collection/></lp1:resourcetype> <lp1:creationdate>2006-08-18T17:43:02Z</lp1:creationdate> <lp1:getlastmodified>Fri, 18 Aug 2006 17:43:02 GMT</lp1:getlastmodified> <lp1:getetag>"118018-1000-4abad580"</lp1:getetag> <D:getcontenttype>httpd/unix-directory</D:getcontenttype> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/"> <D:href>/index.html</D:href> <D:propstat> <D:prop> <lp1:resourcetype/> <lp1:creationdate>2006-08-18T12:19:01Z</lp1:creationdate> <lp1:getcontentlength>5046</lp1:getcontentlength> <lp1:getlastmodified>Fri, 18 Aug 2006 12:19:01 GMT</lp1:getlastmodified> <lp1:getetag>"118016-13b6-c3f4b740"</lp1:getetag> <D:getcontenttype>text/html</D:getcontenttype> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> </D:multistatus>
これをresponseXMLからデータを取り出して適当にHTMLレンダリングする。ステータスコードは200じゃなくって207なことに注意。
XMLHttpRequestは同じドメイン内でしか使えないため、JavaScriptを書いたHTMLは同じWebDAVサービスストーレジにファイルとして置いておくことになる。
WebDAVが認証を必要としていても、あらかじめHTMLロード時にログインされていれば、XMLHttpRequestをコールするたびに認証を再び聞かれることはない。
PROPFINDだけじゃなく、PUT、DELETEなどの更新系操作も可能。簡易メモくらいのアプリなら楽に作れるかも。
ちなみにWebDAV環境はこちらで試しました。
http://www.freedav.com