Firefox ChromeWorker не загружает скрипт

У меня есть требование, когда мне нужно общаться с собственным кодом для выполнения некоторых операций. Я добился успеха, используя 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 в своем веб-приложении.

Спасибо.


person mackelkin    schedule 22.07.2012    source источник


Ответы (1)


Эта конкретная ошибка NS_ERROR_DOM_BAD_URI.

Я не верю, что то, что вы делаете, сработает, и я знаю, что это не скоро сработает в Firefox, потому что enablePrivilege полностью исчезнет.

person Mike Kaply    schedule 23.07.2012
comment
Майк, есть идеи, почему обычный объект Worker может загрузить скрипт, а ChromeWorker не может загрузить тот же скрипт? хммм, насчет вашего второго комментария, как в дальнейшем мы будем получать доступ к привилегированным операциям из наших веб-приложений? - person mackelkin; 23.07.2012
comment
› любая идея, почему обычный объект Worker может загрузить скрипт, в то время как ChromeWorker не может загрузить тот же скрипт. Что ж, вы пытаетесь загрузить внешний URL-адрес в виде файла Chrome, предоставив ему привилегии Chrome. Я не верю, что это разрешено. › в будущем, как мы собираемся получать доступ к привилегированным операциям из наших веб-приложений. От вас ожидают, что вы напишете надстройку, добавит туда функциональность и вызовете ее из своего веб-приложения. Все ваши пользователи должны будут установить надстройку (не идеально, я знаю). Не стесняйтесь высказать свое мнение - bugzilla.mozilla.org/show_bug.cgi?id=757046 - person Mike Kaply; 24.07.2012
comment
Я пытаюсь сделать что-то подобное из надстройки (тем временем мы находимся в FireFox 25), и я также получаю Failed to load script: file:///C:/ и т. д. с правильным путем в файл, который я хочу загрузить. - person Stijn Sanders; 31.10.2013