/ / O applicationCache é 'indefinido' em um webworker compartilhado (HTML5) - javascript, cache, html5, offline, trabalhador

O applicationCache é 'indefinido' em um webworker compartilhado (HTML5) - javascript, cache, html5, offline, worker

Estou tentando acessar o cache do aplicativo offline de um webworker compartilhado (HTML5) sem sorte. Eu tenho batido minha cabeça contra esse problema por muitas horas, então devo estar faltando alguma coisa ... Qualquer ajuda de um JavaScript Ninja lá fora seria muito apreciada!

O W3C a especificação diz que:

cache = self.applicationCache

(em um trabalhador compartilhado) deve retornar o objeto ApplicationCache que se aplica ao trabalhador compartilhado atual.

Estou gerando um trabalhador compartilhado a partir do script principal do meu aplicativo por meio de:

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...");

E aqui está o código do meu trabalhador compartilhado (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);
}

}

Os alertas que estou recebendo são:

  1. o conteúdo de test.html (como eu esperava)
  2. a mensagem "cache: undefined" (opa!)

Tentei fazer isso no Google Chrome 7.0.517.44 e Safari 5.0.2 (Mac OS X 10.6.4). Também tentei acionar o HTTP GET antes de acessar o cache e muitas outras variações, mas todas essas tentativas resultaram no mesmo resultado.

Estou perdendo algo óbvio? Esta é uma limitação conhecida dos navegadores que testei?

Muito Obrigado,

Ori

Respostas:

1 para resposta № 1

Eu descobri a mesma coisa - embora, para ser honesto, estounem tenho certeza de POR QUE gostaríamos de acessar o objeto applicationCache ... Eu pensei apenas, coisas em cache ?! De qualquer forma - quando eu estava tentando fazer funcionar, encontrei este tópico falando sobre isso:

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

Presumi que poderia simplesmente colar e inserir no meuarquivo cache.manifest da página principal que fazia referência ao arquivo de trabalho e preencheria o applicationCache magicamente. Mas não pareceu (eu apenas fiquei indefinido como você).

Na especificação w3c, na seção Modelo de Processamento diz:

Se o escopo global do trabalhador for realmente umObjeto SharedWorkerGlobalScope (ou seja, o trabalhador é um trabalhador compartilhado), e existem quaisquer caches de aplicativos relevantes que são identificados por um URL de manifesto com a mesma origem que url e que têm url como uma de suas entradas, não excluindo entradas marcadas como estrangeiras, então associar o escopo global do trabalhador ao cache de aplicativo mais apropriado daqueles que correspondem.

Mas eu não consigo fazer funcionar!