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

问题描述 投票:0回答:3

当我创建如下所示的网络工作人员时...

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

sample.js 想要来自调用者的一些参数!!
可能吗?

javascript html web-worker
3个回答
15
投票

我没有大量使用网络工作者,但根据这个描述我相信你可以按照以下方式做到这一点:

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

然后,在 example.js 中,按照以下方式构建它:

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

这与传统的参数传递不太一样,因为 postMessage 中的任何内容都必须可格式化为 JSON(例如,没有函数)。但是,它很有可能可以完成您需要它做的事情。


9
投票

您可以在查询字符串中传递参数,并在 example.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'];

实例

您可以在这里看到一个实例

最后的想法

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


2
投票

2018-7月

location
在WebWorkers中可用(根据MDN),它开放了
location.hash
location.search
,甚至
location.pathname
作为传递信息的方式。 (在 Mac OSX 的 Chrome、Safari、FireFox 上测试)

此外,哈希和查询参数适用于 Chrome 和 FireFox

URL.createObjectURL(Blob([src]))
,但不适用于 Safari。

(对死亡帖子表示歉意;搜索结果是永远的!)

© www.soinside.com 2019 - 2024. All rights reserved.