当我创建像下面这样的网络工作者时......
var w = new Worker("./Scripts/sample.js");
sample.js想要来自来电者的一些参数!!
可能的?
答案 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)
location
在WebWorkers(according to MDN)中可用,它打开了location.hash
,location.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
如果要发送的数据量大,请不要使用查询字符串。