代码之家  ›  专栏  ›  技术社区  ›  Ori

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

  •  2
  • Ori  · 技术社区  · 14 年前

    shared webworker (HTML5)不走运。我已经为这个问题绞尽脑汁好几个小时了,所以我一定漏掉了什么。。。任何来自JavaScript忍者的帮助都将非常感谢!

    The W3C the spec 说:

    cache = self.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”(哎呀!)

    我是不是漏掉了一些显而易见的东西?这是我测试过的浏览器的已知限制吗?

    非常感谢,

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mr Speaker    14 年前

    我发现了同样的东西-尽管说实话,我甚至不知道为什么我们想要访问applicationCache对象。。。我以为只是,缓存的东西?!不管怎样-当我试着让它工作时,我发现这条线在谈论它:

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

    我假设我只需在引用工作文件的主页的cache.manifest文件中粘贴和输入,它就会神奇地填充applicationCache。但它似乎没有(我只是像你一样没有定义)。

    如果worker全局作用域实际上是SharedWorkerGlobalScope对象(即worker是共享的worker),并且存在任何相关的应用程序缓存,这些应用程序缓存由与URL具有相同来源的清单URL标识,并且其中一个条目具有URL,但不排除标记为外部的条目,则将worker全局作用域与最合适的那些匹配的应用程序缓存。

    但我做不到!