Google モジュール

で、きました。実際に書いたコードは100行もないです。所要時間も実装だけなら2時間もかかってなくて、一応あとでやることを整理しておくための調査活動に2日ほど。

Google Adsense と (これは見えないw)Google Analytics と 秘密兵器!?のGoogle Gadgetです。

Adsense や Analyticsは、自分に割り当てられたコードを設定することで、任意のページに貼り付けることができるようになっています。
(AnalyticsはWidgetではないので、設定されていればAdsense Widgetについでに埋め込む、というだけ)

Gadget のほうは、Webページに追加、ボタンで取得できるコードのihr?以下のクエリストリングを設定する方向で。

<script src="http://gmodules.com/ig/ifr?url=http://blog-apart.com/....
                                        ^^^^^ ここから後ろをがーと。

ですが、結構問題があって、やっぱりAjaxで初期化すると<script>タグの解釈がおかしいんです。おかしいというか、document.writeは不定の動作になるので使えません。使うためにはかなり変なことをやらないといけません*1

なので、現状は、

  1. 最初のHTMLをもらう時点では Ajax リクエストを発行するJavaScriptコード (全Widget共通)
  2. Google Gadget Widget (だめだな、この言葉)は、<iframe src="自分自身のURI"> を返す
  3. iframe からのリクエストがきたら、<script src="http://gmodules.com..."> を返す
  4. iframe に埋め込まれたコンテンツの高さと幅を調整する

という割と煩雑でサーバーに優しくない初期化になっております。

根本的な解決方法は、Widget のプロパティでAjaxではなくiframeによる初期化をサポートすることでしょうか。
でも。この場合の問題は、SpinelzなどのRIA用JavaScriptの再読込がiframeごとに発生しないかなぁ?という懸念です。この辺の知識は実際に仕事でWebやってないと身につかないかなぁ、と言い訳しつつ、誰かが検証していることを想定して放置プレイ。あとでやる、です。
結果的には、iframeで初期化するもの(script srcを使うもの)とAjaxで初期化するもの(デフォルト, RIA用のRuby Helperが使えなくもない、FCK以外実装してないけど)、をうまく使い分けて、ウィジェット作ってください、ってことでしょうか。

で、前者に関しては、Google Gadgetでほとんど何とかなると思うので、後者どうするか、ですかね。

というか、ここらで、一回リリース番号くぎって、SNS系のFunctionをドリコムに向けて作ろうかなぁ、と。あと1ヶ月だし。

*1:ブログパーツ程度の単純なものであればdocument.writeの定義をごっそり変える、という形で実装できたのですが、やっぱりその場しのぎでしかなくて、document.write書き換えの同期の問題がww あとGGは根本的にムリ。document.writeの使い方が異常、というかinnerHTMLで対処できないレベル。