dotjs面白いところ

dotjs — hack the webというプロダクトが割と面白いです。

利用制限が下記のように厳しいものの何かをインストーするというのではなく、~/.js/にドメイン名+.jsというファイルを置くだけでいいあたりが気楽でいいです。

利用制限

これくらい厳しい条件なら幻影旅団も余裕ですね。再開を待ち望んでいます!><

動作原理

このプロダクトは以下のような流れで~/.js/配下のファイルを実行しています

  1. ChromeでWebページを開く
  2. chrome extensionから、ローカルに立ち上げた(localhost:3131)サーバにリクエストを送る
  3. サーバはリクエストしたパスの情報をもとに~/.js/以下からマッチする内容のファイルをAccess-Control-Allow-Origin = * という形でブラウザに返却
  4. Chromeが実行し、通常のWebのリクエストを実行する

これ、割といいんですが、ローカルに立てるサーバが"dotjs"って名前にもかかわらずWEBrickというのがいけてないと思うんですよ。
jsやるならLivewireとかRhinoとかあるだろうと、思うんですが、今回はNodeです。

というわけでmuddydixon/dotjs at nodejsserver · GitHubです。
変更したのは、bin/djsdというサーバだけです。

まあ、普通にGoogle先生にも差し込んで動いているので大丈夫だと思います。が、何かあれば教えてください。

#!/usr/bin/env node

process.argv.forEach(function(o){
		if(o === '-h' || o.indexOf('help') > -1){
				console.log('usage: djsd [-hv]');
				console.log('stats dotjs server in the foreground. kill with ^C');
				process.exit(0);
		}
		if(o === '-v'){
				console.log('djsd 0.0');
				process.exit(0);
		}
});

var fs = require('fs')
, path = require('path');
var server = require('http').createServer(function(req, res){
		if(req.method === 'GET'){
				var _file = process.env.HOME + '/.js' + '/' + req.url.replace(/\//g, '')
				, _default = process.env.HOME + '/.js' +'/default.js'
				, _body = '';

				if(path.existsSync(_default)){
						_body += fs.readFileSync(_default) + '\n';
						console.log(_body);
				}
				if(req.url !== '/'){
						if(path.existsSync(_file)){
								_body += fs.readFileSync(_file) + '\n';
								console.log(_body);
						}
				}

				res.statusCode = _body === '' ? 204 : 200;
				res.setHeader('Access-Control-Allow-Origin', '*');
				res.setHeader('Content-Type', 'text/javascript');
				res.end(_body);
		}else{
				res.end('');
		}
})
server.listen(3131);

JSかわいいおJS