Как я могу использовать другие библиотеки в веб-работнике? - PullRequest
5 голосов
/ 09 февраля 2012

У меня есть такой код JavaScript,

var worker = new Worker("javascript/worker.js");

worker.onmessage = function(evt)
{
    // stuff
}

worker.js выглядит так,

importScripts("base.js");

function getImage()
{
    $.ajax({
    url: 'URL'
    dataType: "text/plain; charset=x-user-defined",
    mimeType: "text/plain; charset=x-user-defined",
    success: function(data, textStatus, jqXHR)
    {
        callback();
    }
});
}

В файл worker.js не включен jQuery, поэтому он не работает. Если я добавлю это в worker.js,

importScripts("jQuery.js");

Тогда я получаю сообщение,

Uncaught ReferenceError: window is not defined

Я не очень знаком с рабочими. Правильно ли я считаю, что он загружает код worker.js в совершенно отдельную среду (в основном фоновый поток), поэтому у него нет доступа к окну.

Ответы [ 3 ]

11 голосов
/ 15 октября 2015

В файле .js рабочего:

importScripts('../relative/path/lib.min.js', '../../other/lib.js');
3 голосов
/ 01 марта 2013

Чтобы веб-работники не сталкивались с проблемами параллелизма, спецификация веб-работника не позволяет работнику иметь доступ к объекту окна или DOM.

Единственные объекты и методы, доступные внутри рабочего:

  1. Навигатор объекта
  2. Местоположение объекта
  3. XMLHttpRequest
  4. Функции setTimeout и clearTimeout.
  5. Кэш приложения
  6. порождение других веб-работников
  7. Использование метода, специфичного для веб-работника, для загрузки других скриптов

Так что, пока вы можете использовать рабочий для создания XMLHttpRequest вручную; Jquery или любая другая библиотека, которая ожидает возможности доступа к DOM или объекту Window, там никогда не будет работать.

0 голосов
/ 10 февраля 2012

Да, мне было правильно указано, что вызов ajax является асинхронным, поэтому рабочий не требуется.Из-за обстоятельств, которые я не буду объяснять, выясняется, что вызов ajax все равно не работал, поэтому я вернулся к XMLHttpRequest, как это было, и оставил его, используя рабочий.

...