我有几个关于网络工作者的问题
functions.js
,在工作者中复制粘贴文件内容只是为了有两个不同的位置更新我的functions.这是一个chrome应用程序,所以我可以访问最新的Chrome API,我不需要关心向后兼容性。
发布于 2011-09-21 14:17:22
没有来自web worker阶段的任何类型的DOM访问。所有的DOM操作都必须在主JS线程中完成。Web Workers只能通过消息传递与主线程通信。
这个previous SO question告诉你,网络工作者不能访问本地存储,这是通过谷歌搜索很容易找到的。
相同的线程有一个web工作者可以访问的列表。
不清楚您所说的“在worker中包含文件”是什么意思。您可以导入脚本。我不知道你还在问什么。如果对音频文件有帮助,您可以使用ajax调用来获取数据。
对我来说,这听起来像是你需要做一些基础的研究,关于你可以和网络工作者做什么和不能做什么(因为在网络上有一大堆关于它的文章),然后带着更具体的问题回来,结合这些知识。
对于网络工作者来说,没有黑客可以让你做比你应该做的更多的事情。
如果您有很多工作要做,并且希望主UI尽可能具有响应性,那么您可以在主JS线程中执行工作,并使用setTimeout分成小块执行。这是一个非常古老的设计模式,可以追溯到线程出现或易于使用之前的日子。它涉及到设计你的工作,使得它可以以状态存储在某个持久化对象中的小片段来完成,然后你可以重复做少量的工作,然后返回,只是在下一个计时器滴答时拿起下一个工作。
发布于 2013-08-28 22:09:13
您可以加载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>
使用包含hello函数的库worker_lib2.js。
function hello(msg) {
return 'Hello... ' + msg;
}
https://stackoverflow.com/questions/7495227
复制相似问题