mixi がリニューアルして mixCipher が動かなくなっていたのですが、その原因について簡単にメモしておきます。要は mixi が新しく prototype.js を使うように変更されていたために、既存ライブラリでの配列の処理で動作が変わってしまっていたのが原因でした。
以下のコードを実行すると、配列 a
の添字が 3 つ表示されます。これは期待通りの動作です。
<script type="text/javascript"> var a = [ 10, 20, 30 ]; for (i in a) alert (i); </script>
ここで、prototype.js を読み込んでから、同じコードを実行すると、Array.prototype
が拡張されてしまっているために、それら拡張されたメソッド名までが表示されるようになります。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script> <script type="text/javascript"> var a = [ 10, 20, 30 ]; for (i in a) alert (i); </script>
以下のようにしないと最初と同じ動作になりません。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script> <script type="text/javascript"> var a = [ 10, 20, 30 ]; for (i=0; i<a.length; i++) alert (i); </script>
今回はデバッガで案外と簡単に原因が特定できたのですが、これが複数ファイルに渡る巨大ライブラリだったりすると、追跡が嫌になりますね。