サイドバーガジェットでの設定画面が閉じられたら何かする

Vistaサイドバーガジェットにて設定画面を利用することができます。設定画面は、ガジェットの右上に表示される「スパナ(?)」のアイコンをクリックすると表示される画面のことです。

自分で作ったガジェットで設定画面を利用する場合は、ガジェットのメインHTML内のJavaScriptで以下のようなコードを記述します。

System.Gadget.settingsUI = "Settings.html";

ちなみに、下記リンクにあるMSDNのサイドバーガジェットのページは間違ってますね。最初MSDNどおりに書いていてはまりました。上記のコードが正しいです。(ひょっとしてVista RC1から変わったのかな?)


MSDN settingsUI property
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sidebar/sidebar/reference/objects/systemgadget/settingsui.asp


で、今回紹介するのは設定画面が閉じられた時の処理を、メインHTML側で行いたいときにどうすれば良いかという話です。ちなみにガジェットのメインHTMLと設定画面のHTMLは別のウィンドウみたいな扱いなので、JavaScriptの変数の共有はできません。それらで値を受け渡すには、System.Gadget.Settings.write(), System.Gadget.Settings.read()を使う必要があります。(今ブログ書いてて思いましたが、Cookieは使えるだろうか?今度試してみるか。。。)

設定画面が閉じられたことをメインHTML側で知るには、System.Gadget.onSettingsClosedイベントを使えばOKです。

System.Gadget.onSettingsClosed = EventHandler;

EventHandlerにはJavaScriptの関数を指定します。これで設定画面が閉じられたら、指定の関数が実行されるので。設定画面で指定された値を取得し、ガジェットのメインHTML側でも利用できるようになります。

このテクニックは、Vistaの標準ガジェットでも使われているのでコードはそちらを参考にしたほうが良いです。あと、System.Gadget.Settings.write()で注意しなきゃいけないのは...ガジェットをサイドバーから1度削除すると設定画面で設定した値が保存されないことですね。(OSの再起動ではちゃんと値が保存されます。)
あまり納得できる仕様ではありませんが、RC1のサイドバーガジェットでは上記のような動きになります。(RC2以降は不明)

早くVistaもRTMして仕様が固まって欲しいなぁー。