我正在尝试访问shared webworker(HTML5)的离线应用程序缓存而没有运气。我一直在用这个问题敲打这个问题好几个小时,所以我一定会遗漏一些东西......来自JavaScript Ninja的任何帮助都会受到高度赞赏!
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);
}
}
我收到的提醒是:
我在Google Chrome 7.0.517.44和Safari 5.0.2(Mac OS X 10.6.4)上尝试过此操作。我还尝试在访问缓存和许多其他变体之前触发HTTP GET,但所有这些尝试都产生了相同的结果。
我错过了一些明显的东西吗?这是我测试的浏览器的已知限制吗?
非常感谢,
大利
答案 0 :(得分:1)
我发现了同样的事情 - 虽然说实话,我甚至不确定我们为什么要访问applicationCache对象...我认为它只是缓存的东西?!无论如何 - 当我试图让它工作时,我发现这个线程正在谈论它:
http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0519.html
我认为我可以坚持并输入引用工作文件的主页面的cache.manifest文件,它会神奇地填充applicationCache。但它似乎没有(我刚刚像你那样得到了未定义)。
在w3c规范中,在Processing Model部分中说:
如果工作者全局范围实际上是SharedWorkerGlobalScope对象(即工作者是共享工作者),并且存在由清单URL标识的任何相关应用程序缓存,其具有与url相同的源并且具有url作为其中一个条目,不排除标记为外来的条目,然后将工作者全局范围与匹配的最合适的应用程序缓存关联。
但我不能让它发挥作用!