電柱日報

日々の由無し事

iKnowマイウィジェットをはてなダイアリーのサイドバーに貼る

はてなダイアリーのサイドバーに貼り付けられない、と言われてる方がみえたので確認してみたところ、どうやら以前とはJavaScript版の記述が変更になり,Validatorを通らなくなったようです。
アドホックな対応ではありますが、手修正でValidatorを通るようにする修正を書いておきます。
現在、iKnowから取得できるJavaScriptiKnowバッヂのコードはこんな感じ。(実際は1行に繋がってます)

<script type="text/javascript" src="http://www.iknow.co.jp/javascripts/swfobject.js"></script>
<div id="embed_iknow_badge"></div>
<script type="text/javascript">
	var so = new SWFObject('http://www.iknow.co.jp/widgets/iknow_public_badge.swf',
		 'iknow_badge', '150', '40', '7', '#FFF');
	so.addVariable('lang', 'ja');
	so.addVariable('username', '********');
	so.addVariable('color_bg', 'black');
	so.write("embed_iknow_badge");
</script>

でもって、自分が使ってる古い記述はこう。

<script type="text/javascript" src="http://www.iknow.co.jp/javascripts/swfobject.js"></script>
<div id="embed_iknow_public_badge"></div>
<script type="text/javascript">
	var so = new SWFObject('http://www.iknow.co.jp/widgets/iknow_public_badge.swf',
		 'iknow_public_badge', '150', '40', '7', '#FFF');
	so.addVariable('lang', 'ja');
	so.addVariable('username', '********');
	so.addVariable('color_bg', 'black');
	so.write("embed_iknow_public_badge");
</script>

両者を比べてもらえば判りますが、まず、最初に登場するdiv要素のidが、embed_iknow_public_badge から embed_iknow_badge へ(2行目)。
次に、new SWFObject()の2つめの引数が、 iknow_public_badge から iknow_badge へ(5行目)。
あと1つ、一番最後の so.write() の引数が embed_iknow_public_badge から embed_iknow_badge へ変わっています(9行目)。
Dictationバッヂや、BrainSpeedバッヂにも同様の変更が加わっていました。
ですので、現時点で(Googleガジェットなどの手を借りずに)iKnowマイウィジェットはてなダイアリーのサイドバーに貼り付ける手順は以下の通り。
(※はバッヂの種類によって、iknow、dictation、brainspeedのいずれかになります)

  1. iKnowのマイウィジェットページで、JavaScript対応版のコードを取得する
  2. 最初のほうに登場する「div id="embed_※_badge"」を「div id="embed_※_public_badge"」に変更する
  3. 中ほどに登場する new SWFObject() の2つ目の引数を「'※_badge'」から「'※_public_badge'」に変更する
  4. 最後のほうに登場する「so.write("embed_※_badge")」を「so.write("embed_※_public_badge")」に変更する
  5. はてなダイアリーのデザイン設定で、サイドバーの表示させたい場所に貼り付ける

念のため、この方法でマイウィジェットを登録しなおしてみましたが、とりあえずはちゃんと表示されてるっぽい。
ホントはValidator側が対応してくれるのが一番なんですけどネー。
古い記述を有効にするにしても、swfファイルのURL以外に出てくる _public_badge を、 (_public)?_badge にしてやるくらいで対応できそうな気もするけどどうなんかな?