Javascript 当我创建新的WebWorkers对象时,我可以将参数传递给.js函数吗?

Javascript 当我创建新的WebWorkers对象时,我可以将参数传递给.js函数吗?,javascript,html,web-worker,Javascript,Html,Web Worker,当我创建一个web workers时,如下所示 var w = new Worker("./Scripts/sample.js"); sample.js想要从调用方获取一些参数 可能吗?我还没有大量使用web workers,但我相信您可以按照以下思路来做: var worker = new Worker("sample.js"); worker.postMessage({ "args": [ ] }); self.addEventListener("message", function(

当我创建一个web workers时,如下所示

 var w = new Worker("./Scripts/sample.js");
sample.js想要从调用方获取一些参数

可能吗?

我还没有大量使用web workers,但我相信您可以按照以下思路来做:

var worker = new Worker("sample.js");
worker.postMessage({ "args": [ ] });
self.addEventListener("message", function(e) {
  var args = e.data.args;
  // do whatever you need with the arguments
}, false);
然后,在sample.js中,按照以下几行构造它:

var worker = new Worker("sample.js");
worker.postMessage({ "args": [ ] });
self.addEventListener("message", function(e) {
  var args = e.data.args;
  // do whatever you need with the arguments
}, false);
这与传统的参数传递不同,因为postMessage中的任何内容都必须是可格式化的JSON(例如,没有函数)。但是,有一个很好的机会可以让它做你需要它做的事情。

2018年7月
location
在WebWorkers()中可用,它打开
location.hash
location.search
,甚至
location.pathname
作为传递信息的方式。(在Chrome、Safari、FireFox的Mac OSX上测试)

此外,Chrome和FireFox中的hash和query参数对
URL.createObjectURL(Blob([src])
)有效,但对Safari无效

(对发布的内容表示歉意;搜索结果永远是错误的!)

问题 当使用sample.js作为web时,如何传递参数sample.js,工作方式如下
var w=new Worker(“./Scripts/sample.js”)

答复 您可以在查询字符串中传递参数,并在sample.js中从
location.search
获取参数。您不需要调用postMessage来完成此任务

示例代码 调用代码是

var w = new Worker("./Scripts/sample.js?answer=42&question=ultimate");
这将呼叫工人。在sample.js
location.search中
将等于
?答案=42&问题=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'];
实例 你可以看到一个活生生的例子

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

您想对此做些什么?不行。工作人员正在使用我创建的“函数睡眠(ms)”方法每隔一定时间循环。我想在创建worker时设置“ms”值。比如,当你想快速循环时,你将短时间设置为“ms”,当你想慢速循环时,你将长时间设置为“ms”。除了Firefox之外,没有实现哈希和搜索-在#上出错,在#上没有数据?。这个名字很快就能找到,我们可以用它。也许我们将能够访问构造函数包-
新的Worker([path],{type:“module”,name:“parameters”,bagparameter1:“value1”,bagparameter2:“value2”})我会对你的答案投赞成票,但你不认为重复这个问题是没有必要的吗?阿卡比我有过几次这样的情况,OP改变了问题,然后我因为给出了离题答案或没有回答问题而获得了反对票。我不知道如何解决这个问题,我想你不能(我理解)。但是,如果每个人都开始重复这些问题,那么它就不会扩展。