У меня есть требование, когда мне нужно общаться с собственным кодом для выполнения некоторых операций. Я добился успеха, используя JS-Ctypes, и все идет, как и ожидалось. Поскольку связь моего веб-приложения с собственным кодом занимает некоторое время, блокируя основной поток JS, следовательно, замораживая пользовательский интерфейс.
Таким образом, мне нужно создать отдельный поток, которому будет делегирована связь с собственным кодом, и отправить результаты в основной поток, который даст соответствующую обратную связь пользователю. Firefox ChromeWorker — это именно то, что мне нужно, так как это независимые потоки с доступом к JS. -Cтипы.
Моя проблема в том, что на всю жизнь я не могу загрузить скрипт, используя этот подход. Это то, что у меня есть на данный момент:
main.js
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
Components.utils.import("resource://gre/modules/Services.jsm");
var worker = new ChromeWorker("js/fpman/myworker.js");
worker.onmessage = function(e){
console.log(e.data);
};
worker.postMessage('start');
мой рабочий.js
self.onmessage = function(e){
var sum = 1 + 1;
postMessage("Sum is " + sum);
};
Когда этот код запускается в основном JS, я получаю эту ошибку на консоли firebug
Failed to load script: http://localhost:8080/myapp/js/fpman/myworker.js (nsresult = 0x805303f4)
Обратите внимание, когда я использую обычный рабочий поток, т.е.
var worker = new Worker("js/fpman/myworker.js");
файл js (myworker.js) загружается нормально, и я получаю ожидаемый результат, но, конечно, этого недостаточно для моих нужд, поскольку у обычного работника нет доступа к JS-Ctypes. Итак, похоже, проблема в том, как я создаю ChromeWorker. Может ли кто-нибудь просветить меня о том, как правильно создавать и использовать объект ChromeWorker из приложения. Я видел много упоминаний об использовании ChromeWorker в расширениях, но это не то, чего я хочу, я хочу использовать ChromeWorker в своем веб-приложении.
Спасибо.