当我创建如下所示的网络工作人员时...
var w = new Worker("./Scripts/sample.js");
sample.js 想要来自调用者的一些参数!!
可能吗?
我没有大量使用网络工作者,但根据这个描述我相信你可以按照以下方式做到这一点:
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(例如,没有函数)。但是,它很有可能可以完成您需要它做的事情。
您可以在查询字符串中传递参数,并在 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'];
如果您有大量的数据要发送,请不要使用查询字符串。
location
在WebWorkers中可用(根据MDN),它开放了location.hash
,location.search
,甚至location.pathname
作为传递信息的方式。 (在 Mac OSX 的 Chrome、Safari、FireFox 上测试)
此外,哈希和查询参数适用于 Chrome 和 FireFox
URL.createObjectURL(Blob([src]))
,但不适用于 Safari。
(对死亡帖子表示歉意;搜索结果是永远的!)