久しぶりにmixiアプリの事を調査したよ。
多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど
ぐぐってもわからなかったので。。
iframeで外部ページを埋め込めるか?
mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。
つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて
さらにその中で別ドメインなコンテンツを表示できるのか?
結論としてはできる。
ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。
iframeの中にfacebookアプリを埋め込んだりもできたよ。
でもmixiアプリ上で認証させるのは多分規約違反。
iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな?
どうでしょう?
Flashから外部コンテンツとの通信
OpenSocialのFlash埋め込みAPIを使って、配置したSWFから
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。
これもできる。相手のサーバから拒否されてなければ。
JavaScriptはXHRを使えないから(ひょっとして使える?)、makeRequestするわけだけど
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。
makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。
最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました(FireFox3のFireBugで)。
[1,2,3] instanceof Object // => true
{ a:0, b:1} instanceof Object // => true
こんな感じで。
しかし文字リテラルの挙動が期待と違っていました。
"a" instanceof Object // => trueかと思いきやfalse
"a" instanceof String // => trueかと思いきやfalse
ちょっと待ってほしい。
文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに
これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。
事実として
"hoge".sub("o","a") // => "hage"
というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか!
結論
答えはここにありました。
Literals - MDC(文字列リテラル)
String Object - MDC #文字列リテラルは String オブジェクトとは別物
文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。
という事なんですって。
つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。
ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。
Posted in
javascript,
日記 at 10月 14th, 2008.
No Comments.
ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの
埋め込まれているページのURLを取得する方法。
import flash.external.*;
var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));
ExternalInterface.callの1番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが
ExternalInterface.call("myMethod","args1","args2");
は単純に以下のようなJSが実行されているものと考えられるので
eval("myMethod").apply(window,["args1","args2"]);
まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。
prototype.jsで関数のスコープを任意のオブジェクトに委譲する
Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど
jQueryには意外とそれっぽい機能がないように思う。
ので応急処置として以下のコードを書いておく。
jQuery.scope = function(target,func){ return function() { func.apply(target,arguments);}};
こう使います。
$.ajax({
url:'hoge.xml',
complete: $.scope(this,handleComplete)
});
function handleComplete(data,status){ ... }
スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど
クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。
時間があれば、さくっとプラグインにしておきたいけど
プラグインにするほどのコード量じゃないし、
プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。
ちなみに、これはActionScriptでいうところの
mx.utils.Delegate.createと全く同じ機能ですね。
Posted in
ajax,
javascript,
jquery at 2月 21st, 2008.
3 Comments.
ソースコードが公開されたfastladderをさっそくインストールしてみた。
http://code.google.com/p/fastladder/
環境はMac 10.5
INSTALL.txtを読むのが一番だよ。
SVNからチェックアウト
% svn checkout http://fastladder.googlecode.com/svn/trunk/ fastladder-read-only
必要なライブラリをgemでインストール
$ sudo gem install rails --version 2.0.2 -y
$ sudo gem install rfeedfinder
$ sudo gem install feed-normalizer
$ sudo gem install opml
$ sudo gem install mongrel
$ sudo gem install sqlite3-ruby
libfreeimage-3.10.0.dylibをlib以下に移動
cp freeimage-darwin/libfreeimage-3.10.0.dylib fastladder/lib/
DBを初期化
cd falstladder/
% rake db:create:all
% rake db:migrate
サーバを起動
確認
http://127.0.0.1:3000
jQueryでホットキーを処理するメモ
どの入力フォームにもフォーカスしていない場合
nとpで特定の処理を実行するサンプル
$(this).keypress(
function(e)
{
if( $.inArray(e.target,$('input')) <0 )
{
if( e.which==112 )
{
hoge();
}
else if( e.which==110 )
{
foo();
}
}
}
)
Posted in
javascript,
jquery,
日記 at 2月 1st, 2008.
No Comments.
http://www.schillmania.com/projects/soundmanager2/
このFLV版を作るのは結構容易いだろうなぁと思った。
最近特に何もしてないし
比較的FLVとExternalInterfaceは得意だから作ってみようかなぁと。
AS3.0でFLVを再生するくらいのスクリプトなら、5分もあれば書ける。ていうか書けた。
基本的なUIをHTML側にやらせて、
それをFlashに以上するだけだから
flv = new FlvJS();
$('flvplayer').apendChild(flv);
flv.play('hoge.flv');
てなJSを書いたら
ExternalInterface経由で、そのままNetStreamに委譲すればいいわけだ。
あと基本的なイベントのコールバックも受け取れるようにすれば。
そういうのは、eyevioで何回も設計実装してるから作れるぞ。
むしろそのまま採用して欲しいくらいだぞ。
ま、問題は作る時間があるかって話だね。ははは。
久々のエントリーです。
最近はまったく忙しくて、全然勉強する時間もありゃしません。
弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて
それに触発されて、自分もいろいろ書いてみて、社内でシェアしたものをうpします。
まるごとJavaScriptを見ていて、クロージャっていいよね。という気分だったので
クロージャをおさらいしてみました。
Read More...
Posted in
javascript,
programing,
日記 at 3月 16th, 2007.
No Comments.
Canvasの存在を知った時に、とりあえず作ってみたサンプルが
そのままデスクトップに放置してあったので公開してみます。
サンプルはここです。
忙しくて全然手を付けられないや。
Canvasを使ったグラフライブラリはいくつかあるけど
グラフ以外にCanvasの良い利用法って何かねぇ・・・。
全然思いつかないや。
Read More...
また新しいJavaScriptフレームワークの登場らしい。
結構いいなぁと思うんだが、すでに選択が難しいよね。
http://docs.mootools.net/files/Core/Moo-js.html