digital matter

2006 年 12 月 のアーカイブ

全画面系Flashの閉じるボタン

いわゆるフローティングレイヤーにFlash載せて、ブラウザ上を動く何かとか作ったりするわけですが、Flash上の閉じるボタンを押した瞬間にFireFoxが音もなく落ちる現象発生。

FlashからはJavaScriptの関数を呼び出して、その関数が当該レイヤーと子であるFlash本体を消していて、とりあえずJS的にはこんなコード。

closeFlash: function() {
  Element.hide('test_div');
  Element.remove('test_swf');
 
  var so = new SWFObject("/swf/test.swf", "test_swf", "100%", "800px", "8", "#000000");
  with (so) {
    addParam("wmode", "transparent");
    addParam("allowScriptAccess", "always");
    write("test_div");
  }
}

あ、閉じたあと、またすぐ復旧できるようにFlashのオブジェクトを再作成しています。

Flash側でExternalInterfaceを使ってJSの関数を読んでいるのですが、どうやらその辺がくさい。
ExternalInterfaceは、戻り値を取るので、JS側の処理が終わると、Flashに制御が戻る。
しかしその時点でFlashのオブジェクトはすでに消されているので、行き場所がなくてブラウザが落ちる、ということでしょう。
IEは落ちないんですけどね。プラグインのアクセス方法とメモリの制御に関する違いか。

とりあえず、解決策として戻り値だけ先に返すようにした。
実際にオブジェクトを消去するのは、タイマーで少し遅延させてから。

closeFlash: function() {
  this.closeFlash2.callTimeout(200, this);
  return true;
},

closeFlash2: function() {
  Element.hide('test_div');
  Element.remove('test_swf');
 
  var so = new SWFObject("/swf/test.swf", "test_swf", "100%", "800px", "8", "#000000");
  with (so) {
    addParam("wmode", "transparent");
    addParam("allowScriptAccess", "always");
    write("test_div");
  }
}

prototype的な書き方で遅延処理を実行するために今回使ってみたのは以下。

便利だ。

関連する投稿

Picasa2の表示モード

リモートデスクトップ用に色数減らすモードとかあったんですね。
確かに便利かも。

で、これをUltr@VNCで接続された時点で自動的に有効になるようにしたいのだけど…
どうしたものかな。

Ultr@VNCからPicasaのモードを変更させる方が現実的かな。

関連する投稿

javascriptのカラーパレット

カラーパレットが必要になって少し探してみた。
prototypeとか使って、最近の流行りっぽく作ってるものを主に調査。

最近話題のDojo。しかしこれはちょっと…
見た目がイマイチ…

というワケで、見つけたのがこちら。

イケてる。
しかもクリエイティブコモンズライセンス。

簡単に組み込めるし超便利。

あー、そっか。背景を一色に塗りつぶして、PNGのアルファブレンディングで合成すれば明度・彩度のカラーチャートが作れるのね。
IE6、FF2.0、Opera9で正しく表示されることも確認。
色減らしたい場合も改造簡単そうだし。
これはJS上のグラフィックステクニックとして色々使えそう。

関連する投稿

Array.prototype.findByTagName

prototype.jsをちょっと拡張。

Array.prototype.findByTagName = function(tagName) {
  return this.find(function(value, index) {
    return (value.tagName && value.tagName.toUpperCase() == tagName.toUpperCase());
  });
};

ノードリストから、特定のタグの最初の要素を返す。
直下の子ノードの中からある要素を探したりするのに使う。
こんな感じで。

var elem = $A(node.childNodes).findByTagName("DIV");

getElementsByTagNameだとツリー以下を全部検索してしまうのでね…

関連する投稿

IMAPに移行したい症候群

xmailserverと連携でIMAP使えるようにできるらしい。
時間が取れたら導入してみよう。

でも良く考えたら、もうメールクライアントとかいらなくて、出来のいいWebメーラがあればいい気がしてきた。

関連する投稿

OpenCVをPHPから使いたい

使いたい。使えるようにしたい。

とりあえず現状ただの妄想。

それともすでに何かいい感じのあれがあったりしますかね?

関連する投稿

qooxdoo 0.6.3 リリース

リリース早いなー。

今回はクラス名の変更とかイベントハンドラ関係が変わったらしい。
あと、自動以降サポートツールが提供されてます。

Pythonで記述されたスクリプトで、jsファイルを0.6.2から0.6.3に対応するように変更してくれるようです。
ちょっとまだ未実験。

関連する投稿