この間どっかの記事で見つけて(これ自体は数年前から海外では言われていたことだが)ターゲットを探そうと頑張ってたんだけどいろいろと理由があってここで公開することにする。
javascriptは以下のようにコンストラクタを再定義できる。
function Array() { var obj = this; var ind = 0; var getNext = function(x) { obj[ind++] setter = getNext; if (x) { console.log(x.toString());//細工。 } }; this[ind++] setter = getNext; }
実はこれが問題で例えば、配列を含むオブジェクトをJSONで渡す際に必ずArrayコンストラクタが呼び出される。
上記のように少し細工をしておけばcallbackとかついてなくても内容を処理できるのでクロスドメイン対策がされている場合でもJSONからデータを読み取ることが出来る。
余談だが、Gmailなどではこれを回避するためにwhile 1を先頭につけることで無限ループさせている。