jQueryを使ったweb widgetの作り方
How to build a web widget (using jQuery)
http://alexmarandon.com/articles/web_widget_jquery/
非常にわかりやすいTutorial。
これの通りに実装すれば、きれいに、安全に、Web widgetを
実装できる。以下、かなりオレオレ意訳。
まず、ウィジェットって何か、っていうと、
「ウェブページの固まり」
とか
「ウェブページのきれっぱし」
といってます。
あるページの中に、別のウェブページの情報を(細切れにして?)
表示させる、っていうこと。よくあるインターネットの広告とかも
あるページに紛れ込ませて表示させているので、
Web widgetと言える(と思う)
で、Web widgetを作るときの3つの原則。
1. 以下のHTMLをページ側に導入する。divのidはページ内でかぶらないようにする
2. script.jsを以下のように記述(一部オリジナルから変更してます)
これとブックマークレットを組み合わせると面白そうなものができそう。
今度もっと調べてみよう。
http://alexmarandon.com/articles/web_widget_jquery/
非常にわかりやすいTutorial。
これの通りに実装すれば、きれいに、安全に、Web widgetを
実装できる。以下、かなりオレオレ意訳。
まず、ウィジェットって何か、っていうと、
「ウェブページの固まり」
とか
「ウェブページのきれっぱし」
といってます。
あるページの中に、別のウェブページの情報を(細切れにして?)
表示させる、っていうこと。よくあるインターネットの広告とかも
あるページに紛れ込ませて表示させているので、
Web widgetと言える(と思う)
で、Web widgetを作るときの3つの原則。
- ページにまぎれさせて表示するので、元ページを汚さないように、不測の事態で表示が崩れないように気をつける(具体的なTipsは後述)
- CSSとJavascriptは動的に読み込む
- widgetの内容であるデータは、JSONPにより外部から読み込む。(データのみをJSONPで返すAPIを用意するべし)
1. 以下のHTMLをページ側に導入する。divのidはページ内でかぶらないようにする
<script src="http://example.com/widget/script.js" type="text/javascript"></script>
<div id="example-widget-container"></div>
2. script.jsを以下のように記述(一部オリジナルから変更してます)
(function() {
// jQuery ローカル変数
var jQuery;
var jQuery_version='1.4.2';
var widget_html_id='#example-widget-container';
// jQuery がloadされていなかったらgoogle CDNからloadする
if (window.jQuery === undefined || window.jQuery.fn.jquery !== jQuery_version) {
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/"+jQuery_version+"/jquery.min.js");
script_tag.onload = scriptLoadHandler;
script_tag.onreadystatechange = function () {
// IE対策
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
// すでにloadされているjQueryのバージョンが使いたいバージョンと一致している
jQuery = window.jQuery;
main();
}
// jQueryがloadされたら1回だけ呼び出される
function scriptLoadHandler() {
// 安全に$変数を呼び出せるようにするためにローカル変数のjQueryに
// noConflictをtrueにセットする
jQuery = window.jQuery.noConflict(true);
// 自分で実装したいメインロジックを呼び出す
main();
}
// ここからがようやくメインロジック
function main() {
jQuery(document).ready(function($) {
// 外部CSSファイルを読み込む
var css_link = $("<link>", {
rel: "stylesheet",
type: "text/css",
href: "style.css"
});
css_link.appendTo('head');
// 外部JSONP APIからデータを読み込む
var jsonp_url = "http://alpage.org/cgi-bin/webwidget_tutorial.py?callback=?";
$.getJSON(jsonp_url, function(data) {
// データの読み込みが完了したらここが実行される
$(widget_html_id).html("This data comes from another server: " + data.html);
});
});
}
})(); // 無名関数を実行しているので変数名汚染などは無し
これとブックマークレットを組み合わせると面白そうなものができそう。
今度もっと調べてみよう。