8

当我创建如下的网络工作者时......

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

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

4

3 回答 3

14

我还没有大量使用过网络工作者,但根据这个描述,我相信你可以按照以下方式进行操作:

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(例如,没有函数)。但是,很有可能它可以做你需要做的事情。

于 2012-09-12T05:59:36.323 回答
7

问题

将 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.jslocation.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'];

现场示例

你可以在这里看到一个活生生的例子

最后的想法

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

于 2019-04-14T22:14:28.770 回答
2

2018-7月

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

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

(为 necroposting 道歉;搜索结果永远存在!)

于 2018-07-13T00:04:25.473 回答