Javascript 我可以对网络工作者使用什么?

Javascript 我可以对网络工作者使用什么?,javascript,html,google-chrome,google-chrome-extension,web-worker,Javascript,Html,Google Chrome,Google Chrome Extension,Web Worker,我有几个关于网络工作者的问题 工作进程是否有权访问存储?例如,indexedDB/webSQL和启动工作进程的文件的本地存储 如何将文件包含在worker中?我有一个functions.js,它有很多与快速应用程序相关的功能,如果在worker中复制粘贴文件的内容,只需要在两个不同的位置更新我的功能,这是没有意义的 我可以在工作程序中使用DOM吗?就像在临时音频标签中加载音频文件来读取其持续时间,以及它是否可播放一样。不访问父页面的dom,但在工作程序本身中有一个dom 如果任何问题的答案都是

我有几个关于网络工作者的问题

  • 工作进程是否有权访问存储?例如,indexedDB/webSQL和启动工作进程的文件的本地存储

  • 如何将文件包含在worker中?我有一个
    functions.js
    ,它有很多与快速应用程序相关的功能,如果在worker中复制粘贴文件的内容,只需要在两个不同的位置更新我的功能,这是没有意义的

  • 我可以在工作程序中使用DOM吗?就像在临时音频标签中加载音频文件来读取其持续时间,以及它是否可播放一样。不访问父页面的dom,但在工作程序本身中有一个dom

  • 如果任何问题的答案都是否定的,那么如何/应该手动完成


这是针对chrome应用程序的,因此我可以访问最新的chrome API,我不需要关心向后兼容性。

网络工作者无法访问任何类型的DOM。所有DOM操作都必须从主JS线程完成。Web工作人员只能通过消息传递与主线程通信

这说明网络工作者无法访问本地存储,这在谷歌搜索中很容易找到

同一个线程有一个web工作人员可以访问的列表

现在还不清楚你所说的“在工作人员中包含文件”是什么意思。您可以导入脚本。我不知道你还问些什么。如果对音频文件有帮助,可以使用ajax调用获取数据

对我来说,这听起来像是你需要做一些基础研究,了解你可以和不能对网络工作者做什么(因为在网络上有很多关于它的文章),然后带着更多更具体的问题回来,结合这些知识

对于网络工作者来说,没有什么黑客能让你做比你应该能做的更多的事情


如果您有很多工作要做,并且希望尽可能保持主UI的响应性,那么您可以在主JS线程中进行工作,并使用setTimeout分块进行。这是一种非常古老的设计模式,可以追溯到线程可用或易于使用之前的日子。它涉及到设计您的工作,使其可以在保存在某个持久对象中的状态下分小块完成,然后您可以重复执行少量工作,然后返回,只需在下一个计时器计时时执行下一项工作。

您可以加载javascript库。请参见此示例:

<body>
    <button>Start</button>
    <div id="output"></div>
    <script id="worker_1" type="text/js-worker">
        importScripts(base_url + '/worker_lib2.js');

        function run(event) {
            var msg = event.data;
            this.postMessage({ answer: hello(event.data.name)});
        }

        this.addEventListener('message', run, false);
    </script>

    <script>
        var base_url = window.location.href.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
        var array = ['var base_url = "' + base_url + '";' + $('#worker_1').html()];
        var blob = new Blob(array, {type: "text/javascript"});

        $('button').click(function() {
            var url = window.URL.createObjectURL(blob);
            console.log(url);
            var worker = new Worker(url);
            worker.addEventListener('message', function(event) {
                $('#output').html(event.data.answer);
            }, false);
            worker.postMessage({
                name: 'Steve'
            });
        });
    </script>
</body>

嗯,是的,但是将MP3加载到音频标签需要很多时间。工人是一个可能的解决方案,但他们没有DOM。那么,您建议我如何阅读文件的持续时间?那么包容呢?如果不可避免的话,那就是黑客攻击Owell from include我的意思是
我有一个functions.js,它有很多与快速应用程序相关的功能,在worker中复制粘贴文件的内容真的没有意义(如[1]中所述),是的
importScripts
是我所需要的,谢谢!从
hack
我指的是读取文件内容并将其添加到eval中。(是的,我知道这听起来很糟糕,但这可能是一个有原因的黑客行为)那是直到我读到进口文件。很抱歉,如果我的问题让人觉得站不住脚,正如你所说,我对工人来说是新手我只是希望人们在让别人为你做这些工作之前,先在谷歌上做一些简单的研究。我在上面链接的那个帖子是谷歌搜索的第一个热门话题。我不知道那个答案,但在5秒钟内查到了。然后,一旦你掌握了基本知识或对你所读的内容有了具体的问题,你就可以提出与你的问题相关的更有意义的问题。还有很多关于web workers可以做什么和不能做什么以及它们如何工作的优秀文章,这些文章比我们更好地帮助您入门。至于为什么要问websql问题,当然我先用谷歌搜索了一下,但我正在寻找我在写问题时添加的“WebWorkers websql”本地存储。
function hello(msg) {
    return 'Hello... ' + msg;
}