Solución:
No he usado muchos trabajadores web, pero según esta descripción, creo que podría hacerlo de esta manera:
var worker = new Worker("sample.js");
worker.postMessage({ "args": [ ] });
Luego, en sample.js, estructúrelo de esta manera:
self.addEventListener("message", function(e) {
var args = e.data.args;
// do whatever you need with the arguments
}, false);
Esto no es lo mismo que pasar un argumento tradicional, ya que todo lo que vaya en postMessage debe ser formateado como JSON (por ejemplo, sin funciones). Sin embargo, existe una posibilidad decente de que pueda hacer lo que necesita que haga.
Pregunta
¿Cómo puedo pasar los parámetros sample.js cuando lo uso como una web que funciona así? var w = new Worker("./Scripts/sample.js");
?
Respuesta
Puede pasar argumentos en la cadena de consulta y en sample.js obtener los argumentos de location.search
. No es necesario llamar a postMessage para lograr esto.
Código de ejemplo
El código de llamada sería
var w = new Worker("./Scripts/sample.js?answer=42&question=ultimate");
Esto llamará al trabajador. En sample.js location.search
será igual ?answer=42&question=ultimate
. Podemos usar el siguiente código para sacarlo con gracia
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'];
Ejemplo en vivo
Puedes ver un ejemplo en vivo aquí.
Pensamientos finales
Si tienes un grande cantidad de datos para enviar, no use la cadena de consulta.
2018-julio
location
está disponible en WebWorkers (según MDN), que abre location.hash
, location.search
, e incluso location.pathname
como formas de transmitir información. (Probado en Mac OSX en Chrome, Safari, FireFox)
Además, los argumentos hash y de consulta funcionaron en Chrome y FireFox para URL.createObjectURL(Blob([src]))
, pero no Safari.
(Disculpas por la necropublicación; ¡los resultados de la búsqueda son para siempre!)