JScript シェル上で強引に prototype.js を使う

prototype.js など多くの JavaScript ライブラリはブラウザ上で実行されることを前提に書かれている。もったいないですね。でも頑張ればシェルとかブラウザを使わないスクリプトでも使えます。もちろん制限はあるので本気で使ったりしないように…。
ライブラリによって方法は異なるので、prototype.js で使えるようになるまでの過程を記しておく。

d:\scripts\js\ijscript>cscript //nologo ijsc.js
ijsc> [1,2,3].map(function (v) { return v + 1 })
TypeError: オブジェクトでサポートされていないプロパティまたはメソッドです。
ijsc> load('http://prototypejs.org/assets/2007/1/18/prototype.js')
TypeError: 'document' は宣言されていません。

Document を適当に定義してもいいのだけど、めんどうなので IE の力を借りる。

ijsc> var ie = create('InternetExplorer.Application')
ijsc> ie
Windows Internet Explorer
ijsc> ie.document
Error:

とりあえず何か開くと document が使えるようになる。

ijsc> ie.navigate('about:blank')
ijsc> ie.document
[object]
ijsc> var document = ie.document

再度読み込んでみる。

ijsc> load('http://prototypejs.org/assets/2007/1/18/prototype.js')
TypeError: 'window' は宣言されていません。

次は window ね。

ijsc> document.parentWindow
[object]
ijsc> var window = document.parentWindow

もう一回。

ijsc> load('http://prototypejs.org/assets/2007/1/18/prototype.js')
TypeError: 'navigator' は宣言されていません。

次は navigator ですか。

ijsc> window.navigator
[object Navigator]
ijsc> var navigator = window.navigator

更に。

ijsc> load('http://prototypejs.org/assets/2007/1/18/prototype.js')

できたー。

ijsc> [1,2,3].map(function (v) { return v + 1 })
2,3,4
ijsc> var Zzz = Class.create('Zzz')
ijsc> Zzz.prototype = { initialize: function() {} }
[object Object]
ijsc> new Zzz
[object Object]
ijsc>