Skip to content
Legokichi Duckscallion edited this page Aug 10, 2014 · 3 revisions

AppCacheProxy.js

AppCacheProxy.js は https://github.com/legokichi/AppCacheProxy.js で公開されている JavaScript ライブラリです。 Browser, Worker 環境で動作し、Closure Compiler で Minify した状態でも動作します。

AppCacheProxy.js を組み込むと、 global.WMAppCacheProxy が追加されます。

Application CacheされているメインページからblobURIで生成したiframeやworkerを使うと、オリジンの違いのためiframe内からはキャッシュされているソースにアクセスできない問題があります。この問題はオフライン時に顕著になります。

AppCacheProxy は、blobオリジンのiframeやworker内からメインページのオリジンでキャッシュされているソースを使うために、メインページのオリジンで使いたいソースをarraybufferでダウロードしてからblobURLにしてオリジンをそろえ、同じblobオリジンのiframeで使えるようにするためのBlobURIを生成するライブラリです。

## AppCacheProxy 名前空間です。 ## AppCacheProxy.createProxyURL AppCacheProxy.createProxyURL(url:URLString, mimetype:MimeTypeString, callback:Function(err:Error|null, url:BlobURLString):void):void は、URLのソースをBlobURL変換します。
function AppCacheProxy_createProxyURL(url,        // @arg URLString
                                      mimeType,   // @arg mimeTypeString
                                      callback) { // @arg Function - callback(err:Error|null, url:BlobURLString):void
                                                  // @ret void
//{@dev
    $args(AppCacheProxy_createProxyURL, arguments);
//}@dev
    _getArrayBuffer(url, function(err, buffer){
        var blobURL = URL.createObjectURL(new Blob([buffer], {type: mimeType}));
        callback(err, blobURL);
    });
}
## AppCacheProxy.createProxyURLs AppCacheProxy.createProxyURLs(hashes:[{url:String, mimeType:String}], callback:Function(err:Error|null, url:BlobURLString):void):void は、URLのリストからBlobURLへ一括変換します。
function AppCacheProxy_createProxyURLs(hashes,     // @arg HashArray - [{url:String, mimeType:String}]
                                       callback) { // @arg Function - callback(err:Error|null, url:BlobURLString):void
                                                   // @ret void
//{@dev
    $args(AppCacheProxy_createProxyURLs, arguments);
//}@dev
    var task = new Task(hashes.length, function(err, blobUrls){
        callback(err, blobUrls);
    });
    hashes.forEach(function(hash, i){
        var url = hash.url, mimeType = hash.mimeType;
        AppCacheProxy_createProxyURL(url, mimeType, function(err, blobUrl){
            task["set"](i, blobUrl);
            task["done"](err);
        });
    });
}

Clone this wiki locally