var obj = $.extend(true, {}, {}, ... {});
第1引数に true を指定すると、以降のオブジェクトを再帰的に deep コピーしてくれます。
JavaScript をこよなく愛する なかじまんソフトウェア株式会社 のスタッフによるブログです。
OpenSocial Container や Social Gadgets の開発を技術面から支援します。
var obj = $.extend(true, {}, {}, ... {});
$.getJSON('/foo.json').next(function(foo) { // -- (1)
console.log('next', foo);
return $.getJSON('/bar.json').next(function(bar) { // -- (2)
console.log('bar', bar);
return [foo, bar];
});
}).next(function(foobar) { // -- (3)
console.log('foobar', foobar[0], foobar[1]);
}).error(function(status) { // -- (4)
console.log('error', status);
});
$.ajax({
url: '/foo.json', dataType: 'json',
beforeSend: function(xhr) {},
success: function(data, status) {},
error: function(xhr, status, e) {},
complete: function(xhr, status) {}
});
現在は "ig", "orkut", "hi5" のコンテナしか判別できませんが、代表的なコンテナは評価しつつ追加していきます。MySpace も追加しようと試みてはいますが、iframe@src の内容が iGoogle 仕様とはかなり異なるので、どう判断しようか思案中です。よいアイディアはないでしょうか。ガジェットの中から MySpace Developer Platform で開発中かどうか判別する方法を見つけました。
var params = gadgets.util.getUrlParameters();
var v = params['v'] || '';
if (v == 'dev') {
// MySpace Developer Platform
}
var url = '/people/@owner/@self';
var data = {};
$.getData(url, data, function(people) {
var person = people[0];
console.info(person.id);
console.info(person.displayName);
console.info(person.thumbnailUrl);
console.info(person.name.familyName);
console.info(person.name.givenName);
});
var url = '/people/@owner/@friends';
var data = {
startIndex: 2, // 取得位置 0..n -- 省略時 0
count: 10 // 取得件数 1..n -- 省略時 20
};
$.getData(url, data, function(people) {
console.info(people.startIndex); // 取得位置
console.info(people.itemsPerPage); // 取得件数
console.info(people.totalResults); // 総件数
$.each(people, function(i, person) {
console.info(person.id);
console.info(person.displayName);
console.info(person.thumbnailUrl);
console.info(person.name.familyName);
console.info(person.name.givenName);
});
});
/people/@owner -- OWNER
/people/@owner/@self -- OWNER
/people/@owner/@friends -- OWNER FRIENDS
/people/@viewer -- VIEWER
/people/@viewer/@self -- VIEWER
/people/@viewer/@friends -- VIEWER FRIENDS
/people/@me -- VIEWER
/people/@me/@self -- VIEWER
/people/@me/@friends -- VIEWER FRIENDS
/people/@owner/@friends?count=10 -- 10件取得
/people/@owner/@friends?startIndex=10 -- 11件目から取得
/people/@owner/@friends?startIndex=10&count=10 -- 11件目から10件取得
$.get('/people/@owner', {}, function(people) {}, "data");
$.ajax({
url: '/people/@owner',
dataType: 'data',
success: function(people) {}
});
console.info($.container.igoogle);
console.info($.container.myspace);
console.info($.container.sandbox);
console.info($.container.domain); // "google.com", "myspace.com"
Reduce tons of typing. If you are into jQuery and use Dreamweaver then you really need this extension. Let us save you tons of time by reducing keystrokes with our jQuery API extension for Dreamweaver which provides code coloring, Snippets, and code hints that list every jQuery and jQuery UI function for you.インストールは、Download the extension からアーカイブをダウンロードし、Extension Manager で登録するだけです。インストールすると、↓こんな感じで jQuery API のコード補完ができるようになります。
現在は "ig", "orkut", "hi5" のコンテナしか判別できませんが、代表的なコンテナは評価しつつ追加していきます。MySpace も追加しようと試みてはいますが、iframe@src の内容が iGoogle 仕様とはかなり異なるので、どう判断しようか思案中です。よいアイディアはないでしょうか。
Yoichiro さんのコメント... opensocial.getEnvironment().getDomain()にて、コンテナのドメイン名を取得することができます。さっそく opensocial.Environment.getDomain をいろいろなコンテナで試して、どんなドメイン名が取得できるのか調べてみました。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="opensocial.Environment.getDomain">
<Require feature="opensocial-0.8" />
</ModulePrefs>
<Content type="html"><![CDATA[
<script type="text/javascript">
console.info(opensocial.getEnvironment().getDomain());
// iGoogle sandbox http://www.google.co.jp/ig => google.com
// Orkut sandbox http://sandbox.orkut.com/ => orkut.com
// Hi5 sandbox http://sandbox.hi5.com/ => hi5.com
// Hi5 sandbox http://betasandbox.hi5.com// => hi5.com
// MySpace Developer Platform
// http://developer.myspace.com/ => myspace.com
</script>
]]></Content>
</Module>
my $cgi = CGI->new();
my $page = $cgi->url( -absolute => 1, -query => 1 );
# $page => /foobar.cgi?foo1=bar1;foo2=bar2;foo3=bar3
use CGI;
$CGI::USE_PARAM_SEMICOLONS = 0;
use CGI qw(-oldstyle_urls);
my $cgi = CGI->new();
my $page = $cgi->url( -absolute => 1, -query => 1 );
# $page => /foobar.cgi?foo1=bar1&foo2=bar2&foo3=bar3
if (jQuery.container.ig) { // iGoogle のとき }
if (jQuery.container.orkut) { // Orkut のとき }
if (jQuery.container.hi5) { // Hi5 のとき }
if (jQuery.container.orkut && jQuery.container.sandbox) {
// Orkut Sandbox のとき
}
.ig div.photo img { /* iGoogle のとき */ }
.orkut div.photo img { /* Orkut のとき */ }
.orkut.sandbox div.photo img { /* Orkut Sandbox のとき */ }
.hi5 div.photo img { /* Hi5 のとき */ }
$.pref('foo', 'foo1');
$.pref('bar', 123);
$.pref('buz', false);
$.pref({
foo: 'foo1',
bar: 123,
buz: false
});
$.pref('foo', ['foo1', 123, false]);
var foo = $.prefArray('foo');
console.log(foo); // => ['foo1', '123', 'false']
$.pref('foo', '<b>foo</b>');
var foo = $.pref('foo');
console.log(foo); // => '<b>foo</b>'
var lang = $.pref('lang'); // 言語
var country = $.pref('country'); // 地域
var moduleId = $.pref('mid'); // モジュールID
var lang = $.pref('up_lang');
var width = $(window).width();
console.log(width); // => 257
var height = $(window).height();
console.log(height); // => 200
$(window).height(400);
// $(window).adjustHeight(400); と同じ
$(window).title('<b>foo</b>');
// gadgets.window.adjustHeight('<b>foo</b>'); と同じ
また、今回から同時に、住所のデータを Amazon Simple Storage Service (Amazon S3) を使って、Amazon のデータセンタで運用するようにして、信頼性を高めました。本日 (1/2) から Amazon CloudFront を経由して Postal Search Ajax API の住所データを配信するように変更しました。Amazon CloudFront は Japan Edge Locations をサポートするため、日本国内のキャッシュで完結するようになり、米国の Amazon S3 から直接データを配信するよりも、圧倒的に高速になりました。
var node = jQuery(document.createElement('script'))
.attr('type', 'text/javascript')
.attr('charset', 'UTF-8')
.attr('src', 'http://...');
// Opera 9.5 からはブロッキングされない!?
jQuery('head', document)[0]
.appendChild(node);
JSONPが非同期リクエストに修正JSONP が Opera だと非同期処理できない - 川o・-・)<2nd lifeの件で、TAKESAKO @ Yet another Cybozu Labs: Operaでも非同期リクエストが並列処理できる img-JSONPのようなBKも生まれていた困った動作がようやく改善されました。最速インターフェース研究会 :: OperaでJSONPを非同期リクエストするのサンプルで、タイマーが止まらないことを確認できます。(なんでChangelogにないんだ…)この件であまり困ることはありませんが、Opera 9.2 さえ捨ててしまえば、今後は Opera 固有の振る舞いを意識した実装は不要ですね。