applicationCache在共享webworker中是“未定义的”(HTML5)

时间:2010-11-08 09:55:49

标签: javascript caching html5 offline worker

我正在尝试访问shared webworker(HTML5)的离线应用程序缓存而没有运气。我一直在用这个问题敲打这个问题好几个小时,所以我一定会遗漏一些东西......来自JavaScript Ninja的任何帮助都会受到高度赞赏!

The W3C the spec说:

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”(oops!)
  3. 我在Google Chrome 7.0.517.44和Safari 5.0.2(Mac OS X 10.6.4)上尝试过此操作。我还尝试在访问缓存和许多其他变体之前触发HTTP GET,但所有这些尝试都产生了相同的结果。

    我错过了一些明显的东西吗?这是我测试的浏览器的已知限制吗?

    非常感谢,

    大利

1 个答案:

答案 0 :(得分:1)

我发现了同样的事情 - 虽然说实话,我甚至不确定我们为什么要访问applicationCache对象...我认为它只是缓存的东西?!无论如何 - 当我试图让它工作时,我发现这个线程正在谈论它:

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

我认为我可以坚持并输入引用工作文件的主页面的cache.manifest文件,它会神奇地填充applicationCache。但它似乎没有(我刚刚像你那样得到了未定义)。

在w3c规范中,在Processing Model部分中说:

如果工作者全局范围实际上是SharedWorkerGlobalScope对象(即工作者是共享工作者),并且存在由清单URL标识的任何相关应用程序缓存,其具有与url相同的源并且具有url作为其中一个条目,不排除标记为外来的条目,然后将工作者全局范围与匹配的最合适的应用程序缓存关联。

但我不能让它发挥作用!