fujlog > PC > Programming > Yahoo! Widget Engineがヘボい
 

About

ひとつ前の投稿は「液体洗剤の詰め替えが」です。

次の投稿は「ちっちゃいカーナビ」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Category Archives

Monthly Archives

« 液体洗剤の詰め替えが | メイン | ちっちゃいカーナビ »

Yahoo! Widget Engineがヘボい

ふと,いわゆるWidgetというやつを作ってみようかなと思いたちました.

とはいってもうちのWindowsはVistaではないものですから,他のWidget Engineを使わざるをえません.
まあ,とりあえず妥当なのはYahoo Widgetsかなと思って入れてみました.
大体こんな雰囲気ですけれども.

 天気予報はコレです. なかなかきれいでおすすめ.アイコンもMacのより凝ってるかも.

で,ボクの目的はWidgetを作ることだったので,ためしに作り始めてみました.
したら,このEngineが出鱈目なんですよ.
以下,その愚痴が続きます.

まず,WidgetにはメインのWindowオブジェクトがあり,その下にフレームを配置していくという設計になっています.こんな感じ.

   

コントロールはFrameとTextareaとImageだけみたい.
まあ,それはいい. 

で,Windowオブジェクトには,ルートとなるFrameを取得するためのrootプロパティーが用意されているとドキュメントには書いてあるんですが,ない.
しかも,あるFrameの子のオブジェクトのコレクションとしてsubviewsプロパティーがあると書いてあるんだけど,それもない.

さらに,Frameに子を追加するメソッドとして,addSubviewというのがあって,これはまあ動くんだけど,次のコードでは子がちゃんと追加されない.

var img = new Image();
img.src = "some path or url...";
frm.addSubview(img);

なぜ追加されないんだろう?と調べてみると,どうもImageのインスタンスがスコープから抜けた時点で開放されちゃってるくさい.
グローバルに配列を用意しておいて,それにpushしたら表示してくれる.
普通,リファレンスカウント増やすだろ・・・
どうも,コントロールを管理する気がないようだ.

それから,XMLDOMでもハマった.
PerlのSOAP::Liteを使ったXMLRPCサーバーに対して,YWEのXMLDOMでリクエストを作って送るとエラーになる.

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>
    mt.supportedMethods
  </methodName>
  <params/>
</methodCall>

こっちなら大丈夫.

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>mt.supportedMethods</methodName>
  <params/>
</methodCall>

どちらもXMLとしては間違っていないけれど,SOAP::LiteのXML parserはinnerTextをtrimしてくれないようだ.
まあ,どっちかというとYWEのDOMがその辺を意識していないのが悪いんだろうけど.
なんかこういう無頓着に作られたものって嫌だね.

キレイに見えるWidgetも裏ではこんなドロドロなんだなぁ,というか,こんないい加減な仕様だからはやんねーんじゃねーかとか.
Vistaのはこんなヘロヘロじゃないんだろうなぁ・・・

トラックバック

このエントリーのトラックバックURL:
http://www.fujlog.net/mt-4.0/mt-tb.cgi/216

コメント (1)

ku:

むかし1週間くらいだけいじったときもmac版はちゃんと動くけどwindows版はcookieがへんだったり、複数業のテキストエリアの描画に異常があったり、実装がひどかったよ。
vistaは5月まで使えるプレビューリリースをもらったので、下旬になったらいじってみるよー。みたかんじふつうにHTML+jsでajaxでコードを書く漢字で書けそうな感じだったけどどうなんだろう。> windows gadget

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)