2009/11/26

[gadget]onloadを行なう

iPhoneアプリの年齢早見というアプリがあって、ものすごく重宝しているのですが、業務中に使うことに躊躇してしまい(さぼっていると思われてしまうので)、でもものすごく便利なので使いたいなーっとなんとかならないものかと考えていたら、iGoogle gadgetにしてしまえばいいじゃーんと思い、急遽gadgetを作成しようかなと。

guiも似ているし、そもそもアイデア自体も作者さんのものなので、KS Planning Inc.さんのブログできちんとgadgetの作成の許可を申請し、きちんとオッケーを頂いたので問題なく作ることができます。

そこで、iPhoneのアプリと同時並行でガジェットの作成も進行します。

で、今日は、久々のガジェットネタ。

gadgetのパフォーマンスアップの一環として、loadしきってから、中のコンテンツを色々とセットしていきたい場合があります。

webサイトなどを作っている場合などは、JavaScriptのonloadをコールすればいいのですが、gadgetの場合、それに相当するものは、gadgets.util.registerOnLoadHandlerとなります。

実装としてこんな感じ

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="hoge">カレー</div>

<script type="text/javascript">
gadgets.util.registerOnLoadHandler(lf_init);

/* onload時コールされる */
function lf_init(){
document.getElementById("hoge").innerHTML = "シチュー";
}
</script>
]]>
</Content>
</Module>

実行結果はこのような形となりました

Photobucket

きちんと「シチュー」という単語が挿入されています。

ちなみに、lambdaも使うことができます。

その場合は、こんな感じになります。(firefox 3で確認)

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Test"
directory_title=""
title_url="http://widgmedia.com/"
description=""
author="maito.kuwahara"
author_location="Japan"
author_affiliation=""
author_email="mai.musicfactory+gadgetfactory@gmail.com"
author_link="http://temping-amagramer.blogspot.com/"
screenshot=""
thumbnail=""
author_photo="http://widgmedia.com/gadget/my_profile_photo.png"
height="350"
>
</ModulePrefs>
<Content type="html">
<![CDATA[
<style type="text/css">
</style>
<div id="hoge">カレー</div>

<script type="text/javascript">
gadgets.util.registerOnLoadHandler(function(){alert('hoge');});
</script>
]]>
</Content>
</Module>

今回、igoogle上だけしか確認していないのですが、mixi上でも動作すると思います。

0 コメント:

コメントを投稿