我可以在创建新的Web Workers对象时将参数传递给.js函数吗?

时间:2012-09-12 05:46:20

标签: javascript html5 web-worker

当我创建像下面这样的网络工作者时......

 var w = new Worker("./Scripts/sample.js");

sample.js想要来自来电者的一​​些参数!!
可能的?

3 个答案:

答案 0 :(得分:13)

我没有使用网络工作者一大堆,但每this description我相信你可以按照这些方式来做:

var worker = new Worker("sample.js");
worker.postMessage({ "args": [ ] });

然后,在sample.js中,按照这些行构建它:

self.addEventListener("message", function(e) {
  var args = e.data.args;
  // do whatever you need with the arguments
}, false);

这与传统的参数传递并不完全相同,因为postMessage中的任何内容都必须格式化为JSON(例如,无函数)。但是,有一个很好的机会可以做你需要做的事情。

答案 1 :(得分:1)

2018年7月

location在WebWorkers(according to MDN)中可用,它打开了location.hashlocation.search甚至location.pathname作为传递信息的方式。 (在Mac OSX的Chrome,Safari,FireFox中测试过)

此外,哈希和查询参数在Chrome和FireFox中适用于URL.createObjectURL(Blob([src])),但不适用于Safari。

(为发布尸体而道歉;搜索结果是永远的!)

答案 2 :(得分:0)

问题

像这样var w = new Worker("./Scripts/sample.js");用作网络时,如何传递参数sample.js?

答案

您可以在查询字符串中传递参数,并在sample.js中从location.search获取参数。您无需调用postMessage即可完成此操作。

示例代码

呼叫代码为

var w = new Worker("./Scripts/sample.js?answer=42&question=ultimate");

这将呼叫工作人员。在sample.js中,location.search等于?answer=42&question=ultimate。我们可以使用以下代码优雅地将其拉出

var parameters = {}
location.search.slice(1).split("&").forEach( function(key_value) { var kv = key_value.split("="); parameters[kv[0]] = kv[1]; })

var question = parameters['question'];
var answer = parameters['answer'];

实时示例

您可以看到一个实时示例here

最终思想

如果要发送的数据量,请不要使用查询字符串。