本ブログの更新について
本ブログの更新は2016年3月31日をもって終了しました.ありがとうございました.
posted by みっちぃ (管理人)
2007年07月12日
Google Gears の Resource Store を使ってプログラムを組んでみる(コード解説)
昨日の「Google Gears のResourceStoreを使ってプログラムを組んでみる」に関連して,Google gearsのResourceStoreを使ったキャッシュ方法について簡単に解説します.下記解説と同様のコードで実装したサンプルはこちらです....
【gears_init.jsの読み込み】
現在のバージョン(1.0)では,Google Gearsを使うためにgears_init.jsを必要とします.gears_init.jsはGoogle Gears API Developer's Guide (Beta)の「Samples and Tools download」からダウンロードします.gears_init.jsのソースを読むと分りますが,将来的にはこのファイルを必要としない仕組みを検討しているようです.
ファイルの読み込みは,普通にjsファイルを読み込むのと一緒です.
【ファイルキャプチャのためのソース例】
ファイルキャプチャのためのソース例を示します.
先ず1行目で作成するストア名(キャッシュ名)を定義しています.これはなるべくユニークにすべきでしょう.次に,Google Gearsがインストールされているかどうかをチェックしていますが,このコードに関連するインスタンスはgears_init.jsで生成されています.
そして,ローカルサーバを生成して(11〜13行目),保存するためのリソースストアを作成し(15行目),そのストアのcaptureを呼び出して(18行目)キャプチャを行っています.
caputreの第1引数はキャプチャ対象のURL文字列の配列,第2引数はコールバック関数です.URLの配列を与えるために,この例ではcreateURLList()という関数を定義しています.URLの配列を生成する関数の実装例を示します.
この実装例では,まずスクリプトを実行しているページのURLをstrURLsに代入した後,コンマで区切りながらページ内の画像ファイルのURLをstrURLsに追加していきます.Google GearsはSame Origin Policyの制約により,他のホスト上の画像はキャプチャできません.そこで,strURLsに画像ファイルのURLを追加する際,同一ホストのURLであるかを確認しています.最後に,splitメソッドを使ってURLの配列を生成しています.
captureの第2引数にはコールバック関数を指定しますが,例えば次のような定義にします.
1つのファイルがキャプチャされるたびに,キャプチャ対象となったファイルのURL,成功の可否,キャプチャーIDが引数として与えられます.キャプチャーIDはcaptureメソッドを呼び出した際(18行目)に戻り値として取得できる値です.本例ではこの値を活用していません.
キャプチャ対象のファイルが全て取得できたかどうか判断する方法は用意されていないようです.captureメソッドは実行すると直ぐに戻ってきてしまいますので,キャプチャ終了判断する処理はcallbackをうまく利用して実装するしかありません.
【ストアを削除する処理】
これも説明が不要なぐらい簡単です.実装例を示します.
ローカルサーバのインスタンスをつくり,ストア名を指定してremoveStoreを呼ぶだけです.
【キャッシュされたリソースの更新】
ResourceStoreには,ManagedResourceStoreの機能と違ってキャッシュされたリソースを最新のものに更新するメソッドがありません.そのため,一度キャッシュすると,更新する処理を意図的に行わない限り,サーバ上のオリジナルリソースが更新されていても古いものが表示されてしまうようです.
実際に更新するときは,soreオブジェクトのremoveメソッドを使って指定URLのキャッシュを削除し,改めてキャプチャする処理を実装しなければならなさそうです.この点は,改めて調査してみたいと思います.
【テストの方法】
スクリプトが正しく動作するかは,オンライン時とオフライン時で分けてテストする必要があります.オンライン時に適切にキャプチャされていれば,オフライン状態のときに再アクセスしても同じページが表示されます.
ブラウザキャッシュの効果とみわけるには,オフライン状態でストアを削除します.例えばサンプルページでキャプチャしたあと,オフライン状態にしてから再度サンプルページにアクセスします.無事キャッシュされたページが表示されることを確認してから「remove store」ボタンを押下します.次にブラウザの更新ボタンを押下すると404エラーが表示されます.
参考資料
【gears_init.jsの読み込み】
現在のバージョン(1.0)では,Google Gearsを使うためにgears_init.jsを必要とします.gears_init.jsはGoogle Gears API Developer's Guide (Beta)の「Samples and Tools download」からダウンロードします.gears_init.jsのソースを読むと分りますが,将来的にはこのファイルを必要としない仕組みを検討しているようです.
ファイルの読み込みは,普通にjsファイルを読み込むのと一緒です.
<script type="text/javascript" src="http://mkozo.agentier.com/gears/gears_init.js"></script>
|
【ファイルキャプチャのためのソース例】
ファイルキャプチャのためのソース例を示します.
1 var STORE_NAME="mkozo.agentier.com_gears_test2"; 2 function pageCapture() 3 { 4 5 if (!window.google || !google.gears) { 6 alert("Google Gears is not installed"); 7 return; 8 } 9 10 try { 11 localServer 12 = google.gears.factory 13 .create("beta.localserver", "1.0"); 14 15 store = localServer.createStore(STORE_NAME); 16 if(!store) return; 17 18 store.capture(createURLList(), captureCallback); 19 20 } catch (ex) { 21 alert(ex.message); 22 } 23 } |
そして,ローカルサーバを生成して(11〜13行目),保存するためのリソースストアを作成し(15行目),そのストアのcaptureを呼び出して(18行目)キャプチャを行っています.
caputreの第1引数はキャプチャ対象のURL文字列の配列,第2引数はコールバック関数です.URLの配列を与えるために,この例ではcreateURLList()という関数を定義しています.URLの配列を生成する関数の実装例を示します.
25 function createURLList() 26 { 27 var strURLs = location.href; 28 29 //Search Image Element 30 for(i=0; i < document.images.length; i++) 31 { 32 //Same origin check 33 if(document.images[i].src .indexOf("http://"+location.hostname) == 0) 34 strURLs += "," +document.images[i].src; 35 } 36 37 return strURLs.split(","); 38 } |
captureの第2引数にはコールバック関数を指定しますが,例えば次のような定義にします.
24 function captureCallback(url, success, captureId) { 25 26 } |
キャプチャ対象のファイルが全て取得できたかどうか判断する方法は用意されていないようです.captureメソッドは実行すると直ぐに戻ってきてしまいますので,キャプチャ終了判断する処理はcallbackをうまく利用して実装するしかありません.
【ストアを削除する処理】
これも説明が不要なぐらい簡単です.実装例を示します.
40 function removeStore() 41 { 42 try{ 43 localServer = 44 google.gears.factory .create("beta.localserver", "1.0"); 45 46 localServer.removeStore(STORE_NAME); 47 48 }catch(ex){ 49 alert(ex.message); 50 } 51 } |
【キャッシュされたリソースの更新】
ResourceStoreには,ManagedResourceStoreの機能と違ってキャッシュされたリソースを最新のものに更新するメソッドがありません.そのため,一度キャッシュすると,更新する処理を意図的に行わない限り,サーバ上のオリジナルリソースが更新されていても古いものが表示されてしまうようです.
実際に更新するときは,soreオブジェクトのremoveメソッドを使って指定URLのキャッシュを削除し,改めてキャプチャする処理を実装しなければならなさそうです.この点は,改めて調査してみたいと思います.
【テストの方法】
スクリプトが正しく動作するかは,オンライン時とオフライン時で分けてテストする必要があります.オンライン時に適切にキャプチャされていれば,オフライン状態のときに再アクセスしても同じページが表示されます.
ブラウザキャッシュの効果とみわけるには,オフライン状態でストアを削除します.例えばサンプルページでキャプチャしたあと,オフライン状態にしてから再度サンプルページにアクセスします.無事キャッシュされたページが表示されることを確認してから「remove store」ボタンを押下します.次にブラウザの更新ボタンを押下すると404エラーが表示されます.
参考資料
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/4680834
この記事へのトラックバック
30000PVを機にAnalyticsの結果を考察する
Excerpt: ブログを立ち上げてから約5ヶ月で30000PVとなりました.アルファブロガーと呼ばれる方々のブログに比べると大したことのない数字だと思いますが・・・. さて,この機にGoogle Analyti..
Weblog: おきらくプログラマー
Tracked: 2007-07-22 16:28
Google Gears のResource Storeによるオフライン対応でSOA(Same Origin Policy)問題を解決する一方法
Excerpt: 【はじめに】 以前,Google Gears のAPIを用いたWebページのオフライン対応方法の簡単な例とコード解説を掲載しました.この例では,ManagedResourceStore ではなく R..
Weblog: おきらくプログラマー
Tracked: 2007-08-09 02:43
Google Gearsの注目度
Excerpt: 本ブログでは,以前 Google Gears の Resource Storeを使ったオフライン用のコンテンツキャプチャ方法を試しました.また同一元生成ポリシー(SOP:Same Origin Po..
Weblog: おきらくプログラマー
Tracked: 2007-08-27 00:34
http://blog.sakura.ne.jp/tb/4680834
この記事へのトラックバック
30000PVを機にAnalyticsの結果を考察する
Excerpt: ブログを立ち上げてから約5ヶ月で30000PVとなりました.アルファブロガーと呼ばれる方々のブログに比べると大したことのない数字だと思いますが・・・. さて,この機にGoogle Analyti..
Weblog: おきらくプログラマー
Tracked: 2007-07-22 16:28
Google Gears のResource Storeによるオフライン対応でSOA(Same Origin Policy)問題を解決する一方法
Excerpt: 【はじめに】 以前,Google Gears のAPIを用いたWebページのオフライン対応方法の簡単な例とコード解説を掲載しました.この例では,ManagedResourceStore ではなく R..
Weblog: おきらくプログラマー
Tracked: 2007-08-09 02:43
Google Gearsの注目度
Excerpt: 本ブログでは,以前 Google Gears の Resource Storeを使ったオフライン用のコンテンツキャプチャ方法を試しました.また同一元生成ポリシー(SOP:Same Origin Po..
Weblog: おきらくプログラマー
Tracked: 2007-08-27 00:34