ラベル OAuth の投稿を表示しています。 すべての投稿を表示
ラベル OAuth の投稿を表示しています。 すべての投稿を表示

2011-03-21

Google Apps Script に続けて Windows Script Host (WSH) で 2-Legged OAuth をやってみました

こんにちは。なかじまん @ YOKOHAMA です。
東北関東大震災で被災された皆さまには心よりお見舞い申し上げます。



Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた に続いて、Windows Script Host (WSH) を使って Windows のコマンドラインから 2-Legged OAuth をやってみました。

WSH の場合、いろいろな実装方法を選択できそうなのですが、前述の Google Apps Script の JavaScript をそのまま動かす方法を選択しています。

なので、ソースコードはほとんど同じで、UrlFetch Services ではなく XMLHttpRequest を同期で使っているくらいの違いです。
<job>
<script language="JavaScript" src="sha1.js"></script>
<script language="JavaScript" src="oauth.js"></script>
<script language="JavaScript" src="json2.js"></script>
<script language="JavaScript">

  var endpoint = 'http://nakajiman.3arrows.jp/api/rpc/a';
  var consumerKey = '{Consumer Key}';
  var consumerSecret = '{consumer Secret}';
  var requestor_id = 'nakajiman(at)lrlab.to';

  var message = { method: 'POST', action: endpoint, parameters: {} };

  OAuth.setParameter(message, 'oauth_consumer_key', consumerKey);
  OAuth.setParameter(message, 'oauth_version', '1.0');
  OAuth.setParameter(message, 'oauth_timestamp', OAuth.timestamp());
  OAuth.setParameter(message, 'oauth_nonce', OAuth.nonce(6));
  OAuth.setParameter(message, 'xoauth_requestor_id', requestor_id);

  OAuth.SignatureMethod.sign(message, { consumerSecret: consumerSecret });

  var url = OAuth.addToURL(endpoint, message.parameters);
  var data = JSON.stringify({
      jsonrpc: '2.0',
      method: 'activities.create',
      params: { userId: '@viewer', group: '@self', activity: { title: 'Say hello!' } },
      id: 1
  });
  
  var xhr = WScript.CreateObject('MSXML2.XMLHTTP');
  xhr.open(message.method, url, false);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.send(data);
  
  if (xhr.status != 200)
    WScript.Echo(xhr.status + ' ' + xhr.statusText);
  else {
    var res = JSON.parse(xhr.responseText);
    WScript.Echo(res.result);
  }

</script>
</job>
ただいま、 企業やチーム向けのプライベートマイクロブログ 3arrows では、お客様のシステムやサービスとの連携を目的とした「シングルサインオン」と「2-Legged OAuth ベースの API」に取り組んでいます。

2-Legged OAuth ベースの API 公開により、システムやサービスの統合に加えて、Google Apps Script や Windows Script Host から 3arrows を操作して、ユーリティティの用途としても活用できるようになります。

2011-03-02

Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた

こんにちは。なかじまんです。

Google Apps Script の UrlFetch Services は 2Legged OAuth に対応してないっぽいので自前でやってみた。ちなみに 3Legged OAuth は標準でできるみたいです。

はじめに JavaScript の OAuth ライブラリ の内sha1.js と oauth.jp oauth.js を貼り付けます。そして、次のようにリクエストを署名して、UrlFetch Services でエンドポイントを叩きます。

以下の例では、Google Friend Connect の People API を呼び出して、Viewer (xoauth_requestor_id) のプロフィールを取得して、ニックネームを表示しています。
function myFunction() {

  var action = 'http://www.google.com/friendconnect/api/people/@me/@self';
  var accessor = { consumerSecret: '{consumerSecret}' };
  var message = { method: 'GET', action: action, parameters: {}, };

  OAuth.setParameter(message, 'oauth_consumer_key', '{oauth_consumer_key}');
  OAuth.setParameter(message, 'oauth_version', '1.0');
  OAuth.setParameter(message, 'oauth_timestamp', OAuth.timestamp());
  OAuth.setParameter(message, 'oauth_nonce', OAuth.nonce(6));
  OAuth.setParameter(message, 'xoauth_requestor_id', '18200614986198926446');

  OAuth.SignatureMethod.sign(message, accessor);

  var url = OAuth.addToURL(action, message.parameters);

  var response = UrlFetchApp.fetch(url, {method: message.method });
  if (response.getResponseCode() == 200) {
    var res = JSON.parse(response.getContentText());
    Browser.msgBox(res.entry.displayName);
  }
}
今回は Query String で試しましたが Authorization Header でも大丈夫なはず。

ということで Google Apps Script から 2Legged OAuth できちゃいました。

2009-09-05

opensocial-jquery 1.0.5 をリリースしました。OAuth リクエストと認証、Album と MediaItem の取得、People と AppData の同時取得に対応しました。

おはようございます。なかじまんです。

opensocial-jquery 1.0.5 をリリースしました。今回のリリースは、OAuth リクエストと認証、アルバムと写真の取得、プロフィールとアプリデータの同時取得という 3つの対応が柱です。

OAuth リクエストと認証

jQuery.ajax を使って、OAuth リクエストを認証して、外部ホストからデータを取得したり送信したりできるようにしました。

gooホームのガジェットから FriendFeed にメッセージを投稿する サンプルのソースコードと解説 を用意していますので、ソースコードの雰囲気を体感してみてください。また、このガジェットが動作する様子をキャプチャして動画にしましたので、再生してみてください。



jQuery.ajax を使って、リクエストを OAuth 認証して、外部ホストにデータを送信できます。
  $.ajax({
type: 'post',
url: 'http://friendfeed-api.com/v2/entry',
data: { body: 'Say Hello!' },
dataType: 'json',
oauth: 'friendfeed',
success: function(data, status) {
console.info(data, status);
},
error: function(xhr, status, e) {
if (status == 'oauth')
$('<a href="#signin"/>')
.text('Sign in with FriendFeed')
.click(function() {
$.oauth('friendfeed', function() {});
return false;
})
.minimessage();
console.error(xhr, status, e);
}
});
このとき、jQuery.ajax の oauth オプションに、ガジェットXML の OAuth/Service@name を指定します。
  <OAuth>
<Service name="friendfeed">
<Request url="https://friendfeed.com/account/oauth/request_token"
param_location="uri-query"/>
<Authorization url="https://friendfeed.com/account/oauth/authorize"/>
<Access url="https://friendfeed.com/account/oauth/access_token"
param_location="uri-query"/>
</Service>
</OAuth>
jQuery.ajax は OAuth リクエストの認証を必要とするとき、エラーイベントをコールバックします。このとき status は oauth を表します。続けて jQuery.oauth を使って OAuth リクエストを認証できます。このとき、指定した OAuth/Service@name の認証ページをポップアップウィンドウで開きます。OAuth 認証してポップアップウィンドウを閉じると、コールバックしますので、その中から処理を再開できます。

詳しくは API リファレンス を見てください。なお OAuth リクエストと認証は gooホームでのみ動作確認しています。今後、他のコンテナでも動作確認をしつつ対応を進めていきます。

アルバムリストの取得

jQuery.ajax を使って VIEWER の アルバムリストを取得できます。
  $.ajax({
url: '/albums/@viewer/@self',
data: {},
dataType: 'data',
success: function(albums) {
$.each(albums, function(i, album) {
console.info(album.id);
console.info(album.title);
console.info(album.description);
console.info(album.thumbnailUrl);
console.info(album.ownerId);
console.info(album.mediaItemCount);
});
},
error: function(xhr, status, e) {
console.error(xhr, status, e);
}
});
詳しくは API リファレンス を見てください。なお、アルバムリストの取得は orkut 仕様に準じていて orkut のみで動作確認をしています。mixi での動作確認はしていませんので、フィードバックを期待してます。

アルバムの写真リストの取得

jQuery.ajax を使って VIEWER の アルバムの写真リストを取得できます。URL でアルバムID を指定します。
  $.ajax({
url: '/mediaitems/@viewer/@self/1251149609611',
data: {},
dataType: 'data',
success: function(mediaitems) {
$.each(mediaitems, function(i, mediaitem) {
console.info(mediaitem.id);
console.info(mediaitem.url);
console.info(mediaitem.title);
console.info(mediaitem.description);
console.info(mediaitem.thumbnailUrl);
console.info(mediaitem.albumId);
});
},
error: function(xhr, status, e) {
console.error(xhr, status, e);
}
});
詳しくは API リファレンス を見てください。なお、写真リストの取得は orkut 仕様に準じていて orkut のみで動作確認をしています。mixi での動作確認はしていませんので、フィードバックを期待してます。

プロフィールとアプリデータの同時取得

プロフィールや友達リストを取得するとき、appData パラメータを指定して、アプリケーションのデータを同時に取得できます。アプリケーションのデータ項目はカンマ区切りで指定します。

今までは、プロフィールや友達リストの取得と、アプリケーションのデータの取得が別々の 2段構えでしたが、これが 1回の jQuery.ajax で取得できるようになりますので、さらにソースコードがシンプルになるのではと期待しています。
  $.ajax({
url: '/people/@viewer/@self',
data: { appData: 'comment,feeling' },
dataType: 'data',
success: function(people) {
var person = people[0];
console.info(person.appData.comment);
console.info(person.appData.feeling);
},
error: function(xhr, status, e) {
console.error(xhr, status, e);
}
});
詳しくは API リファレンス を見てください。

質問や不具合の報告などのフィードバックは大歓迎です。また、修正パッチや拡張コードの提供も歓迎します。

海外の方から opensocial-jquery 1.0.4 や 1.0.5 を jQuery 1.3.2 に書き直したものの提供も受けています。近いうちに公開しますので、もう少しお待ちください。

追記です。jQuery.param のエンコード方法を書き換えました。今までは、空白を + にエンコードしていましたが、これを %20 でエンコードするようにしました。おそらく影響はないと思いますが、お伝えしておきます。

追記です。@datoka さん。フィードバックありがとうございました。
@datoka @nakajiman opensocial jquery v1.0.5 album, mediaitemともmixiで動いております!パラメータ指定は(元々)無視されますが

2009-06-23

Aptana Jaxer 向けの OS API をベースとした OpenSocial Client Library を作りました

おはようございます。なかじまんです。

Aptana Jaxer のサーバサイド JavaScript 向けの OpenSocial Client Library を作りました。opensocial-jaxer-client と名付け Apache License 2.0 のオープンソースとして Google Code で公開します。



opensocial-jaxer-client は OS API ( Lightweight JavaScript API ともいう) のソースコードをそのままベースとして Aptana Jaxer 向けに手直ししたものです。なので opensocial-jaxer-client を使うと OS API の手軽さそのままで OpenSocial の Server-side integration ができちゃうわけです。

さっそく実例を紹介します。

はじめに opensocial-jaxer-client.js をロードし osapi.init を使って初期化します。rpcUrl は RPC Protocol のエンドポイントです。fcauth は Google FriendConnect の cookie ベースのセキュリティトークンです。現在のリリース 0.1.0 は fcauth のみサポートします。近いうちに consumer key, consumer secret もサポートします。

<script src="opensocial-jaxer-client.js" runat="server"></script>
<script runat="server">

osapi.init({
rpcUrl: 'http://friendconnect.gmodules.com/ps/api',
fcauth: Jaxer.Util.Cookie.get('fcauth03382920006806842951')
});

osiapi.people を使って、プロフィールや友達リストを取得できます。OS API は execute メソッドの引数に与えた関数を非同期でコールバックしますが、opensocial-jaxer-client は同期して結果を戻り値で返します。

var viewer = osapi.people.getViewer().execute();

Jaxer.Log.info('Your name is ' + viewer.displayName);

var viewer = osapi.people.getViewer({
fields: ['profileUrl', 'thumbnailUrl']
}).execute();

Jaxer.Log.info('Your profile URL is ' + viewer.profileUrl);
Jaxer.Log.info('Your thumbnail URL is ' + viewer.thumbnailUrl);

osiapi.appdata を使って、アプリケーションデータの取得、更新、削除ができます。

var r = osapi.appdata.update({
userId: '@viewer', data: { gifts: 'a crazed monkey' }
}).execute();

var data = osapi.appdata.get({
userId: '@viewer', keys: ['gifts']
}).execute();

Jaxer.Log.info('AppData gifts is ' + data[viewer.id].gifts);

var r = osapi.appdata.deleteData({
userId: '@viewer', keys: ['gifts']
}).execute();

osiapi.activities を使って、アクティビティの取得と追加ができます。

var r = osapi.activities.create({
userId: '@viewer', activity: {
title: 'Hello!', url: 'http://example.com/'
}
}).execute();

var list = osapi.activities.get({
userId: '@viewer'
}).execute();

list.forEach(function(data) {
Jaxer.Log.info('Activity title is ' + data.title);
Jaxer.Log.info('Activity URL is ' + data.url);
});

osapi.batch を使って、上記の people, appdata, activities のバッチ操作もできます。

var batch = osapi.newBatch()
.add('viewer', osapi.people.getViewer())
.add('data', osapi.appdata.get({ userId: '@viewer' }))
.execute();

Jaxer.Log.info('Viewer id is ' + batch.viewer.id);
Jaxer.Log.info('Viewer name is ' + batch.viewer.displayName);
Jaxer.Log.info('Viewer thumbnail URL is ' + batch.viewer.thumbnailUrl);
Jaxer.Log.info('AppData gifts is ' + batch.data[batch.viewer.id].gifts);

Aptana Jaxer 向けということで、ほとんどニーズがないかと思いますが、わたし自身、目的があって使えていますので、もしかしたら必要とする人や場面があったりするかも... という願いを込めて、オープンソースとして公開しました。

2009-05-30

Google Friend Connect の two-legged OAuth とその使いどころを確認してみた

こんばんは。なかじまんです。なんか Google Wave の熱気がスゴイんですが、Google Friend Connect ネタでいきます。

はじめに Google Friend Connect (GFC) の two-legged OAuth を使って、ユーザのプロフィールを取得して表示してみました。スクリーンショットはこんな感じです。



そして、ソースコードはこんな感じです。いつもどおり Aptana Jaxer を使っています。JavaScript なのでクライアントサイドに見えるかもしれませんが、サーバサイドで動かしています。ややこしくてごめんなさい。

<script type="text/javascript" src="sha1.js" runat="server"></script>
<script type="text/javascript" src="oauth.js" runat="server"></script>
<script type="text/javascript" src="jquery.js" runat="both"></script>

リクエストの署名は Google Code の OAuth JavaScript ライブラリを使っています。表立って JavaScript ライブラリのリンクは存在しませんが、SVN や Google Group を探るとたどり着けます。

<script type="text/javascript" runat="server">
jQuery(function($) {

var action = 'http://www.google.com/friendconnect/api/people/@me/@self';

var accessor = {
consumerSecret: '{consumerSecret}'
};

var message = {
method: 'GET',
action: action,
parameters: {},
};

OAuth.setParameter(message, 'oauth_consumer_key', '*:03382920006806842951');
OAuth.setParameter(message, 'oauth_version', '1.0');
OAuth.setParameter(message, 'oauth_timestamp', OAuth.timestamp());
OAuth.setParameter(message, 'oauth_nonce', OAuth.nonce(6));
OAuth.setParameter(message, 'xoauth_requestor_id', '12976690996215323511');

OAuth.SignatureMethod.sign(message, accessor);

コンシューマキーとそのシークレットを使って、リクエストに署名しています。



↑コンシューマキーとシークレットは GFC サイトで入手できます。

var url = OAuth.addToURL(action, message.parameters);

var text, person;
try {
text = Jaxer.Web.get(url, { as: 'text' });
person = eval('(' + text + ')').entry;
} catch (e) {
throw new Error(''+e);
}

$('#person span').text(person.displayName);
$('#person img').attr('src', person.thumbnailUrl);
$('#person textarea').val(text);
});
</script>

署名したリクエストを発行して、該当ユーザのプロフィールを取得しています。そして、プロフィールを HTML として表示しています。

<p id="person">
<span></span><br />
<img /><br />
<textarea rows="10" cols="80"></textarea>
</p>

プロフィールを表示する HTML です。textarea 要素にレスポンスのテキストをそのまま表示しています。

GFC のドキュメントでは RESTful API 仕様どおり @me の部分に guid を指定できる と解説があるのですが、次のパターンを試してみたのですが、すべて 401 エラーとなってしまいます。あれれ。何か間違っていますでしょうか。ですので、今回は @me として xoauth_requestor_id でユーザ ID を指定しています。

people/12976690996215323511/@self
people/friendconnect.google.com:12976690996215323511/@self
people/friendconnect.google.com%3A12976690996215323511/@self

GFC の two-legged OAuth が使えることが確認できたので、次はその使いどころです。

GFC の Server-side Integration のデモとして、次のような The Chow Down というサイトとその ソースコード が公開されています。その中で two-legged OAuth を使っています。



two-legged OAuth の主な使いどころは、(あたり前ですが)ユーザが GFC にサインインしていないときです。The Chow Down は、サイト独自のユーザ登録による認証と GFC による認証を併用しています。

GFC にサインインしているときは、Cookie の fcauth トークン を使えば The Chow Down のすべてのリソースにアクセスできるので、このとき two-legged OAuth を使う絶対的な理由はありません。

サイト独自の認証でサインインしているとき、The Chow Down リソースにアクセスするために two-legged OAuth が必要になります。プロフィールなどのデータは手元に保存してあるので two-legged OAuth は必要ないのでは ... と疑問に思いましたが、GFC のドキュメントをよく読んでみると、取得したプロフィールなどのデータはキャッシュはしていいけれど、ユーザID 以外は永続的に保持してはならないとあります。

ですので、The Chow Down は、GFC と関連付くユーザのプロフィールを参照するとき、キャッシュを調べて、キャッシュに存在しないとき、two-legged OAuth でプロフィールを取得してキャッシュするようになっています。

じゃぁ逆にいうと Cookie の fcauth トークンは不要では... と感じてくるのですが、少なくとも GFC にサインインしないと、該当ユーザの ID が判別できません。また、The Chow Down は GFC にサインインしているとき、@viewer/@friends を使って GFC ネットワークの友達関係を持ち込んで、アプリケーション上でうまく活用しています。

The Chow Down の設計方針は
The Chow Down - Server-side integration walkthrough
に解説があるので、GFC を自サイトに統合しようと考えているときは、まずはじめに一読するとよいと思います。

2009-04-21

(続) いくつかコンテナをピックアップして gadgets.io.makeRequest で SIGNED リクエストを投げてみました

こんばんは。なかじまんです。

いくつかコンテナをピックアップして gadgets.io.makeRequest で SIGNED リクエストを投げてみました。
いくつかのコンテナをピックアップして gadgets.io.makeRequest で SIGNED リクエストを投げてみました。リクエスト先にどのようなパラメータが届くのか気になっていたので、この機会にメモしましたのでお伝えします。何かの参考になれば幸いです。
続けて goo Social Platform と Google Friend Connect でも gadgets.io.makeRequest で SIGNED リクエストを投げてみました。

↓goo Social Platform です。長いパラメータ値は省略...しています。

POST /html.cgi?
oauth_nonce=481b41a1dfcf30e9104e1007d871d8bc&
oauth_timestamp=1240319903&
oauth_consumer_key=goo.ne.jp&
opensocial_owner_id=developmentor&
opensocial_viewer_id=developmentor&
opensocial_app_id=oLIhOpmAdmKz&
oauth_token=&
xoauth_signature_publickey=http%3A%2...&
oauth_signature_method=RSA-SHA1&
oauth_signature=oGyFzzLK1Z...

xoauth_signature_publickey は公開鍵の URL そのもののようです。opensocial_app_url は含まれないようです。

↓Google Friend Connect です。長いパラメータ値は省略...しています。

POST /html.cgi?
oauth_body_hash=2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D&
opensocial_owner_id=06839264165111349771&
opensocial_viewer_id=12976690996215323511&
opensocial_app_id=16421886313376599907&
opensocial_app_url=http%3A%2F%2...&
xoauth_signature_publickey=pub.1229714852.-8759618427808416822.cer&
oauth_version=1.0&
oauth_timestamp=1240319353&
oauth_consumer_key=friendconnect.google.com&
oauth_signature_method=RSA-SHA1&
oauth_nonce=1240319353855292000&
oauth_signature=VlMwQPJ1Gm...

ガジェットの中から gadgets.io.makeRequest したものです。Important OAuth signing changes coming to a container near you で告知されていた oauth_body_hash (OAuth Request Body Hash) が含まれていますね。それ以外は iGoogle や Orkut と同じようです。

この OAuth Request Body Hash というものですが、とても後ろ向きな対応で、解せない感じがするのですが、これって本当に必要なものでしょうか。なんか複雑にしてるだけのような気がする...。理解不足だったらごめんなさい。

goo Social Platform と Google Friend Connect から gadgets.io.makeRequest で SIGNED リクエストを投げるコードを紹介しておきます。

var url = 'http://example.com/html.cgi';
$.ajax({
type: 'post', url: url, oauth: 'signed',
complete: function(xhr, status) {
console.log('complete: oauth: signed', xhr, status);
}
});

今のところ Google Friend Connect ガジェットからも opensocial-jquery は使えています。現在 Google Friend Connect ガジェットでの動作確認を進めているところです。次のバージョンで対応する予定です。

2009-04-03

Gadgeteer: Easy OpenSocial gadget development with Rails or Sinatra.

おはようございます。なかじまんです。次の取り組みの中で opensocial-jquery が使われています。

Gadgeteer: Easy OpenSocial gadget development with Rails or Sinatra.
Gadgeteer simplifies OpenSocial Gadget development by giving you helpers you can use in your Rails application to verify Signed Requests and access OpenSocial data.
OpenSocial ガジェットと SIGNED リクエストを使って、プロフィール (VIEWER や OWNER) のデータをバックエンドで扱うのを目的とした Rails アプリケーションの枠組みです。gnerate すると、ガジェットからバックエンドまで、この目的を実現するためのコードを生成してくれるようです。

opensocial-jquery は、ガジェットのための JavaScript ライブラリの中で使われています。ざっとソースコードを眺めてみましたが、jQuery.getData を使ったプロフィールの取得や jQuery.ajax を使った SIGNED リクエストの発行に使っているようです。また、jQuery.fn.adjustHeight などヘルパ的なものも使っていました。

プレゼンテーションの動画と スライド (PDF) を公開しています。どのような場なのか分かりません。英語でもないですかね。



opensocial-jquery を使った実例ということでお伝えしました。参考になればうれしいです。

2009-03-14

opensocial-jquery 0.6.0 をリリースしました。jQuery.ajax で signed リクエストが使えます。ほか Flash や MiniMessage など UI のサポートを追加しました。

こんばんは。なかじまんです。opensocial-jquery 0.6.0 をリリースしました。

Ajax OAuth

jQuery.ajax を使って、リクエストに署名して、外部ホストからデータを取得できます。このとき oauth に signed を指定します。

$.ajax({
url: 'http://example.com/data.json',
dataType: 'json',
oauth: 'signed',
success: function(data, status) {
console.log(data, status);
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
}
});

jQuery.get を使っても同じことができます。このとき url に続けて signed を指定します。

$.get('http://example.com/data.json signed', function(data, status) {}, 'json');

jQuery.getJSON でもリクエストに署名できます。

$.getJSON('http://example.com/data.json signed', function(data, status) {});

jQuery.getScript でもリクエストに署名できます。

$.getScript('http://example.com/data.js signed', function(data, status) {});

jQuery.getFeed でもリクエストに署名できます。

$.getFeed('http://example.com/data.atom signed', function(data, status) {});

jQuery.ajax を使って、リクエストに署名して、外部ホストにデータを送信できます。このとき oauth に signed を指定します。

$.ajax({
type: 'post',
url: 'http://example.com/data.json',
data: { comment: 'Say Hello!' },
dataType: 'json',
oauth: 'signed',
success: function(data, status) {
console.log(data, status);
},
error: function(xhr, status, e) {
console.info(xhr, status, e);
}
});

jQuery.post を使っても同じことができます。このとき url に続けて signed を指定します。

$.post('http://example.com/data.json signed', { comment: 'Say Hello!' },
function(data, status) {}, 'json');

Flash

jQuery.flash を使って、Flash Player の存在を確認できます。

if ($.flash) {
console.log('Detects Flash Player.');
}

jQuery.flash.version を使って、Flash Player のメジャーバージョンを確認できます。

console.log('Major version: ' + $.flash.version);

jQuery.fn.flash を使って、Flash コンテンツを埋め込んで表示できます。

$('#container').flash('http://example.com/data.swf');

パラメータも指定できます。このとき、パラメータ名と値のセットを指定します。

$('#container').flash('http://example.com/data.swf', {
width: 50, height: 100
});

さらに flashVars も指定できます。このときも、パラメータ名と値のセットを指定できます。

$('#container').flash('http://example.com/data.swf', {
width: 50, height: 100,
flashVars: { comment: 'Say Hello!' }
});

MiniMessage

jQuery.fn.minimessage を使って、閉じるボタン付きのメッセージを表示できます。

$('<span/>')
.text('Say Hello!')
.minimessage();



また jQuery.fn.minimessage にコールバック関数を指定して、閉じるイベントをハンドリングできます。

$('<span/>')
.text('Say Hello!')
.minimessage(function() {
console.log('Thanks for the message.');
});

Locale

jQuery.msg を使って、メッセージバンドルを取得できます。

var message = $.msg('notfound');