我正在尝试访问 shared webworker 的离线应用程序缓存(HTML5) 没有运气。几个小时以来,我一直在努力解决这个问题,所以我一定遗漏了一些东西……非常感谢 JavaScript Ninja 的任何帮助!
cache = self.applicationCache
(在共享 worker 中)应该返回适用于当前共享 worker 的 ApplicationCache 对象。
我正在通过我的应用程序的主脚本生成一个共享 worker :
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...');
这是我的共享 worker (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);
}
我收到的警报是:
- test.html 的内容(如我所料)
- 消息“缓存:未定义”(糟糕!)
我在 Google Chrome 7.0.517.44 和 Safari 5.0.2 (Mac OS X 10.6.4) 上试过这个。我还尝试在访问缓存和许多其他变体之前触发 HTTP GET,但所有这些尝试都产生了相同的结果。
我是否遗漏了一些明显的东西?这是我测试过的浏览器的已知限制吗?
非常感谢,
原
最佳答案
我发现了同样的事情 - 虽然老实说,我什至不确定为什么我们想要访问 applicationCache 对象......我认为它只是缓存的东西?!无论如何 - 当我试图让它工作时,我发现这个线程在谈论它:
http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0519.html
我假设我可以在引用工作文件的主页的 cache.manifest 文件中粘贴并输入,它会神奇地填充 applicationCache。但它似乎没有(我只是像你一样未定义)。
在 w3c 规范中,在处理模型部分它说:
如果 worker 全局范围实际上是一个 SharedWorkerGlobalScope 对象(即 worker 是一个共享的 worker),并且有任何相关的应用程序缓存由与 url 具有相同来源的 list URL 标识并且将 url 作为它们的其中之一条目,不排除标记为外部的条目,然后将工作人员全局范围与匹配的最合适的应用程序缓存相关联。
但是我不能让它工作!
关于javascript - applicationCache 在共享 webworker (HTML5) 中是 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122769/