2

運が悪かったので、共有Webworker(HTML5)のオフラインアプリケーションキャッシュにアクセスしようとしています。私は何時間もこの問題に頭を悩ませてきたので、何かが足りないに違いありません...そこにあるJavaScript Ninjaの助けをいただければ幸いです!

W3Cの仕様によると、次のようになっています。

cache = self.applicationCache

(共有ワーカー内)現在の共有ワーカーに適用されるApplicationCacheオブジェクトを返す必要があります。

次の方法で、アプリのメインスクリプトから共有ワーカーを生成しています。

var worker = new SharedWorker('js/test.js');
worker.port.addEventListener('message', function(e) {
    alert('got message: ' + e.data);
}, false);
worker.port.start();
worker.port.postMessage('hi there...');

そして、これが私の共有ワーカー(test.js)のコードです:

var cache = self.applicationCache;

onconnect = function(e) {
    var port = e.ports[0];
    port.onmessage = function(e) {
        // test.html contains a <html manifest='test.manifest'> tag 
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", "test.html", false);
        xmlHttp.send(null);
        var result = xmlHttp.responseText;
        port.postMessage(result);
        port.postMessage('cache: '+ cache);
}

}

私が受け取っているアラートは次のとおりです。

  1. test.htmlの内容(予想通り)
  2. メッセージ「cache:undefined」(おっと!)

これをGoogleChrome7.0.517.44とSafari5.0.2(Mac OS X 10.6.4)で試しました。また、キャッシュや他の多くのバリエーションにアクセスする前にHTTP GETをトリガーしようとしましたが、これらの試みはすべて同じ結果になりました。

明らかな何かが欠けていますか?これは私がテストしたブラウザの既知の制限ですか?

どうもありがとう、

オリ

4

1 に答える 1

1

私は同じことを見つけました-正直なところ、なぜapplicationCacheオブジェクトにアクセスしたいのかさえわかりません...私はそれをキャッシュしたものだと思ったのですか?!とにかく-私がそれを機能させようとしていたとき、私はこのスレッドがそれについて話しているのを見つけました:

http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0519.html

ワーカーファイルを参照するメインページのcache.manifestファイルに貼り付けて入力するだけで、applicationCacheに魔法のようにデータが入力されると思いました。しかし、それは見えませんでした(私はあなたのように未定義になりました)。

w3c仕様では、ProcessingModelセクションに次のように記載されています。

ワーカーグローバルスコープが実際にSharedWorkerGlobalScopeオブジェクトである場合(つまり、ワーカーが共有ワーカーである場合)、urlと同じオリジンを持つマニフェストURLによって識別され、エントリの1つとしてurlを持つ関連するアプリケーションキャッシュがあります。外部としてマークされたエントリを除外し、ワーカーのグローバルスコープを一致するエントリの中で最も適切なアプリケーションキャッシュに関連付けます。

しかし、私はそれを機能させることはできません!

于 2010-12-14T15:28:09.780 に答える