2015-11-05 3 views
1

Я получаю работу своего веб-рабочего в букмаркете. Код находится в той же папке, что и вызывающий код, я не могу явно загружать рабочий код, поскольку он загружается с помощью функции importScripts в файле worker.js.Загрузка веб-рабочих в закладках

Я создаю рабочий, как так

if(typeof(Worker) !== "undefined") { 
     worker = new Worker('worker.js'); 
    } 

тогда я называю работника как так

worker.postMessage({'cmd': 'start', 'grabRate': grabRate}); 

, который должен вызвать функцию в моем файле рабочего

self.addEventListener('message', function(e) { 
    console.log("worker message"); 
    var data = e.data; 
    switch (data.cmd) { 
    case 'start': 
     console.log("start from worker"); 
... 

Я не» t см. любые сообщения отладки в консоли, сообщающие мне, что «сообщение» было вызвано в рабочем. Я загружаю только код, который вызывает worker.js (в функции загрузчика букмарклета), поскольку он загружается функцией new Worker (если я также включил файлы в функцию загрузчика, я мог видеть файл, но функция все еще не вызывается). Я не вижу рабочие файлы в списке источников отладки Chrome или других файлов, загруженных с помощью функции importScripts.

+0

Объект работника не кажется пустым на то, что я вижу: [. Он имеет прототип, а также два свойства onerror и onmessage. –

+1

Где вы видите нулевой объект? Из вывода кажется, что вы получаете обычный объект WebWorker, но без привязок к ним сейчас. – Sirko

+0

Sirko, Stranded Kid, ваше право, может быть, я немного преждевременно, думая, что рабочий еще не загружен, возможно, что-то еще чтобы сообщения не работали, я отлаживаю их сейчас. – ejectamenta

ответ

0

Проблема заключалась в том, что букмарклет загружал скрипт в контексте страницы, на которой он запущен. Поскольку отладчик не выдал сообщение об ошибке, когда файл не был найден, и рабочий объект оказался действительным, причина того, что рабочий не работает правильно, не была очевидна. Для того, чтобы решить эту проблему работник был загружен как этого

worker = new Worker('//path.to/worker.js'); 

(// для счетов для HTTPS/HTTP домена)