当我创建如下的网络工作者时......
var w = new Worker("./Scripts/sample.js");
sample.js 想要一些来自调用者的参数!!
可能的?
当我创建如下的网络工作者时......
var w = new Worker("./Scripts/sample.js");
sample.js 想要一些来自调用者的参数!!
可能的?
我还没有大量使用过网络工作者,但根据这个描述,我相信你可以按照以下方式进行操作:
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(例如,没有函数)。但是,很有可能它可以做你需要做的事情。
将 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'];
你可以在这里看到一个活生生的例子
如果要发送大量数据,请不要使用查询字符串。
location
在 WebWorkers 中可用(根据 MDN),它打开了location.hash
、location.search
,甚至location.pathname
作为传递信息的方式。(在 Mac OSX 的 Chrome、Safari、FireFox 中测试)
此外,hash 和 query 参数在 Chrome 和 FireFox 中有效URL.createObjectURL(Blob([src]))
,但在 Safari 中无效。
(为 necroposting 道歉;搜索结果永远存在!)