ApplicationCache является «неопределенным» в общем веб-редакторе (HTML5) - PullRequest
2 голосов
/ 08 ноября 2010

Я пытаюсь получить доступ к автономному кешу приложений общего веб-работника (HTML5), но безуспешно. Я уже много часов бьюсь головой об этой проблеме, поэтому, должно быть, я что-то упустил ... Любая помощь от JavaScript-ниндзя будет высоко ценится!

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" (упс!)

Я пробовал это в Google Chrome 7.0.517.44 и Safari 5.0.2 (Mac OS X 10.6.4). Я также пытался запустить HTTP GET перед доступом к кешу и многим другим вариантам, но все эти попытки привели к одному и тому же результату.

Я что-то упускаю из виду? Это известные ограничения браузеров, которые я тестировал?

Большое спасибо,

Ori

1 Ответ

1 голос
/ 14 декабря 2010

Я обнаружил то же самое - хотя, если честно, я даже не уверен, ПОЧЕМУ мы хотели бы получить доступ к объекту applicationCache ... Я думал, что это просто, кешировать вещи ?!В любом случае - когда я пытался заставить его работать, я обнаружил, что этот поток говорит об этом:

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

Я предполагал, что могу просто вставить и войти в мой файл cache.manifestглавная страница, которая ссылается на рабочий файл, и она волшебным образом заполняет applicationCache.Но это не выглядело (я только что получил неопределенное, как вы сделали).

В спецификации w3c, в разделе Модель обработки это говорит:

Если рабочая глобальная область действия на самом деле является SharedWorkerGlobalScopeобъект (т. е. работник является совместно используемым работником), и существуют любые соответствующие кеши приложений, которые идентифицируются URL-адресом манифеста с тем же источником, что и URL-адрес, и имеют URL-адрес в качестве одной из своих записей, не исключая записи, помеченные как внешние, затем связываютрабочая глобальная область с наиболее подходящим кешем приложений из тех, которые совпадают.

Но я не могу заставить его работать!

...