どーも

某jsライブラリ群で、妙な挙動があったため調査依頼を受けていたが原因は
prototype.js との併用にあった。

最近のブラウザには window.JSON という JSON を取り扱うブツがあるのだが、
どうも window.JSON.stringify(); の調子が悪かった。

prototype.js のある環境で
試しに、配列を JSON文字列に変換してみた。

何かがおかしい。

期待値としては、 [“Hello”] という文字列が返ってくるのが正しいのだが、
ダブルクオートの前に余分な文字がいらっしゃる。

ひょっとして…とおもって、prototype.js のない環境で同じ検証を行った。

問題なし。

というわけで、犯人は prototype.js だった。

https://prototype.lighthouseapp.com/projects/8886/tickets/453

一先ず、prototype.js を1.7 に上げることで解決したようだ。

OpenPNE3で、jQueryのプラグインを動かしまくりたいのに画面によっては
prototype.jsがロードされてしまっているので、なかなか動かすのが大変というのが
よくありがちです。

理由は 両方共 $() が宣言されていて、しかも挙動がちがうんですよ。


これはイメージです。

jQueryにはコンフリクト回避できる方法があるらしいけど、jQueryプラグインのライセンスによっては
いじりまくることが出きないケースもあったり…。

ってなわけで、だんだんprototype.jsとjQueryに嫌気が差してきたわけです。
(もちろん、並行するようなケースがないと言い切れる場合は全く問題ない)

というわけで、自作のOpenPNE3プラグインとか、自作アプリでは Google Closure Tools
積極的に使っていこうと考えたわけです。
UIも国際化されているし、ライセンスはApache License2.0だし、コンパイラーがすげぇし。

http://github.com/arshaw/fullcalendar
fullcalendar使いたかったZe…

まぁ、$()のコンフリクト回避しつつ使うとすれば、Iframeでウヒヒするとか解決策はありそうですがね。