キャッシュ制御
jQuery.container.cache を使って、外部データのキャッシュ有無を、まとめて切り替えられるようにしました。開発中のデバッグで役に立つんじゃないかと期待しています。
jQuery.container.cache = false とすると、次のとおり、gadgets.io.makeRequest、gadgets.io.getProxyUrl、gadgets.flash.embedCachedFlash, embedFlash など、外部データのキャッシュをすべて無効にできます。
$.container.cache = false; // nocache=1
// gadgets.io.makeRequest
$.getJSON('http://example.com/data.json',
function(data, status) {}
);
// gadgets.io.getProxyUrl
$('<img/>').attr('src',
$.proxy('http://example.com/data.gif')
);
// gadgets.flash.embedCachedFlash, embedFlash
$('#container').flash('http://example.com/data.swf');
jQuery.container.cache は URL パラメータの nocache と連動します。nocache=1 のときは false となり、それ以外のときは true となります。nocache=1 のときは、自動的にキャッシュが無効になるため、明示的に jQuery.container.cache を使う機会は少ないかもしれません。
mixi Platform の改善
jQuery.ajax とショートカットを使って、外部データを取得できるようになりました。mixi の gadgets.io.makeRequest は、コールバックするデータに HTTP ステータスコードを表す rc プロパティを含まないため、正常と判断できず、常にエラーとなっていたようです。
jQuery.container を使って mixi Platform かどうかを判別できるようにしました。
if ($.container.mixi) {
// // This container is mixi.
}
さらに HTML 要素に対して、mixi Platform を表すクラスを自動的に追加し、CSS のクラスを使って mixi Platform だけの CSS を適用できるようにしました。
.mixi div.photo img {
/* This container is mixi Platform. */
}
Google Friend Connect ガジェットの対応
Google Friend Connect ガジェットに対応しました。OpenSocial API に加え Google Friend Connect 固有の @admins セレクタを使って、管理者のプロフィールを取得できます。
$.getData('/people/@owner/@admins', {},
function(people) {}
);
jQuery.container を使って Google Friend Connect かどうかを判別できるようにしました。
if ($.container.friendconnect) {
// // This container is Google Friend Connect.
}
さらに HTML 要素に対して、Google Friend Connect を表すクラスを自動的に追加し、CSS のクラスを使って Google Friend Connect だけの CSS を適用できるようにしました。
.friendconnectdiv.photo img {
/* This container is Google Friend Connect. */
}
なお、Google Friend Connect API (インページ)には対応していません。検討中です。
JSDeferred の強化
JSDeferred のクラスメソッドを jQuery.deferred, jQuery.parallel, jQuery.wait, jQuery.next, jQuery.call として使えるようにしました。また、JSDeferred のインスタンスメソッドとして JSDeferred.wait、jQuery.ajax とショートカットを追加しました。
opensocial-jquery は opensocial.DataRequest のバッチリクエストをサポートしませんが、jQuery.parallel を使うことで、いくつかのリクエストをまとめることができます。
$.parallel([
$.get('http://www.yahoo.co.jp/'),
$.getData('/people/@viewer/@self'),
$.getData('/people/@viewer/@friends')
]).next(function(data) {
console.log(data[0]); // http://www.yahoo.co.jp/
console.log(data[1]); // /people/@viewer/@self
console.log(data[2]); // /people/@viewer/@friends
}).error(function(e) {
console.log(''+e);
});
opensocial-jquery は、すべてのリクエストを jQuery.ajax とショートカットで表現するため、上記のように gadgets.io.makeRequest と opensocial.DataRequest をまとめてリクエストできたりします。いずれかでエラーが発生すれば error メソッドに流れますので、エラーハンドリングも手軽です。
5 件のコメント:
はじめましてこんにちは、越川と申します。
いつもopensocial-jquery利用させていただいております。突然のコメント失礼します。
さて、下記の部分なのですが
nocache=1 のときは false となり、それ以外のときは true となります。nocache=1 のときは、自動的にキャッシュが無効になるため、明示的に jQuery.container.cache を使う機会は少ないかもしれません。
opensocial-jquery.jsの
L3852を見ると
cache: nocache == '1'
となっているので、逆の振る舞いをしてしまっているように見えます。
実際、nocache=1のときにmakeRequestの結果をcacheしていて気づきました。
もう、すでに認識されているようでしたら申し訳ないです!
それでは、ご確認ください、よろしくお願いします。
越川さん。なかじまんです。コメントありがとうございます。
$.container.cache が逆になっているの全く気が付いていませんでした。
完全な思い込みです。テストとその結果の見方も逆になってました。
さっそくですが、修正&テストして、リポジトリに 1.0.2a を格納しました。もしよろしかったら使ってください。
http://opensocial-jquery.googlecode.com/svn/trunk/features/opensocial-jquery/
ちょっと恥ずかしい感じですが、助かりました。今後ともよろしくお願いします。
なかじまんさん
越川です。対応ありがとうございます!
興味本位なのですが
makeRequestやproxyの部分の条件文で
opt_params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0;
としないで
opt_params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 1;
とするのは何か理由があるんですか?
どちらにせよ、opt_params[gadgets.io.RequestParameters.REFRESH_INTERVAL] を短く設定してもmixiではキャッシュsれてしまうようです。。。
それでは今後ともよろしくお願いします。
gadgets.io.makeRequest のソースコードの中で、次のような箇所がありました。
if (httpMethod === "GET" && refreshInterval > 0) {
そのため、あえて 0 以上の 1 を指定しています。
mixi はキャッシュを無効にできないのですね(できなくなった?)。
jQuery.ajax の cache を使うと、リクエストパラメータにタイムスタンプを自動付与できるので、この振る舞いを使って、キャッシュを無効にできるかとも思います。
http://docs.jquery.com/Ajax/jQuery.ajax#options
なるほど、勉強になりました。
ありがとうございました。
jQuery.ajax の cacheも試してみます!
コメントを投稿