このままだとShift_JISでローカルディスクにあるライブラリしかロードできないが、あとでXHRとADODB.Streamを組み合わせてgetSourceメソッドを書き換えればWebサーバにあるライブラリのロードもできるようになる。03時46分36秒きっかけprototype.jsが大好きだ。組み込みオブジェクトのprototypeを汚染拡張しているところが大好きだ。WSHでも使ってみたい。※:以下の記述は、prototyp.js1.4.0ベースです。1.5系はどうかわかりません困ったことにprototype.jsを(Windowsで、ね。)ダブルクリックしてみると、さっそく「documentは宣言されていません」とか怒られるんですよ。これ、当然といえば当然で、prototype.jsはブラウザホストで稼動させることが前提なので、windowやらdocumentやらlocationやらを参照してるからなのだけど、この辺のオブジェクトをダミー宣言してやれば、ClassだのEnumerableだのTryだのは使用できるんですよ。ダミースクリプト前のエントリの感じで以下のスクリプトを、prototype.jsよりも前にロードしておくことにする。仮に「dummy.js」とでもしておこう。}んで、prototype.jsもロードdummy.jsよりも後なら、prototype.jsのロードができるんですよ。番号:3コンソールベースのWSHだとテキスト処理かファイル処理が主になると思うけど、こういうときにEnumerableインターフェイスが使えるのって、個人的にはかなり便利で手放せない感じ。FileSystemObjectのFilesとかSubFoldersとかを取り回すEnumeratorにEnumerableなラッパーかぶせたりすると、100単位のファイルがあるディレクトリを取りまわしたりするときもメモリを消費しないですむ(処理は遅いけど)ので、お勧めです。需要はなさそうだけど。21時04分28秒XHRとADODB.Streamを組み合わせるhttp経由でソースを取得するのはXHRで問題ないが、日本語のコメントが入ったeucエンコードのソースなんかだとちょっとアレなので、ADODB.Streamと組み合わせてみたり。定番テクニックですか。基本的には以下の流れになる。XHR(Microsoft.XMLHTTP)でソースを取得バイナリモードで開いたADODB.StreamにXHR.responseBodyを書き込むADODB.Streamを巻き戻し、テキストモードに変更するCharsetプロパティに"_autodetect"を指定して自動検出にするReadText()でテキスト読み出しをする具体的なコードは以下のようになる。charsetの順序で実行する必要がある。55ちなみにlibsの各要素で「file://ファイルへの絶対パス」を使用するとローカルファイル読み出しができる。getSource()内でパラメータを検査して判断すればURLでもファイルパスでも対応できるようになる。02時56分17秒WshArgumentsは使いづらいもともとWSH実行環境下では、WScript.Argumentsでコマンドライン引数にアクセスできるが、ちょっと使いづらい(特に名前付き引数)。感覚的に使いやすいJavaScriptオブジェクトに展開してみる。(要:prototype.js)名前付き引数と名前なし引数WScript.Argumentsプロパティ(=WshArgumentsオブジェクト)には、Namedプロパティ(WshNamedオブジェクト)とUnnamedプロパティ(WshUnnamedオブジェクト)があり、それぞれ名前付き引数と名前なし引数へのアクセスを提供している。名前付き引数は、たとえば「/f:ファイルパス」のようにスラッシュから始まるスイッチと引数の値をコロンで区切った形式で提供される。名前なし引数はそのまんまで、スイッチを伴わず値のみで提供される。エクスプローラ上で.jsファイルにファイル/フォルダをドラッグドロップすると、そのパスが名前なし引数として渡される。コレクション??WshNamed/WshUnnamedオブジェクトはコレクションオブジェクトで、たとえばlengthプロパティはあるがfor/for...inでアクセスできないなど、結構使いづらい。このようにActiveXで提供されるコレクションを操作する場合は、JScriptの独自拡張であるEnumeratorオブジェクトを使用する。Enumeratorの使い方は以下のような感じ。);}このままじゃ使いづらいし、せっかくprototype.jsを使うんだからEnumerableとして使えるラッパーのファクトリを考えてみる。$E()じゃひねりなさすぎだろま、別に$Eじゃなくてもいいんだけど、仮ということで。);}_eachさえ実装できればEnumerableになるのはありがたい。引数の展開ようやっと準備が整ったので、引数を展開する関数を作る。parseArguments();と呼び出すだけ。C:\test.txtのようにアクセスできる。吊ブックマークレットtumblrのキーボードショートカットが便利になっとる。Chrome編dataスキームの画像をブロックしてみるローカルストレージを確認したり消したりするブックマークレットそうそう、いまさらTwitter始めました。(9)このブログについてJavaScriptとかC#とかPHPとか。