Как получить доступ к jQuery в HTML 5 веб-работника

Я не могу получить доступ к jQuery внутри HTML5веб-работник, Есть ли способ, которым я могу сделать это?

 user96056708 мая 2012 г., 03:58
@Marc, у меня есть некоторые функции, которые часто обращаются к Jquery. Вот почему я нуждался в jquery. А как насчет запросов Jquery ajax?
 Marc08 мая 2012 г., 03:56
У меня сложилось впечатление, что веб-работники не имеют доступа к DOM.
 Justin Thomas08 мая 2012 г., 03:55
Мне не нравится тот день, когда вы начинаете нуждаться в синхронизированных блоках для доступа к элементу dom :) ПОЧЕМУ МОЙ $ ('div & apos;) потребуется 1 минута, чтобы вернуться ?!
 adeneo08 мая 2012 г., 03:58
@Marc - они не имеют или, по крайней мере, должны иметь, у меня сложилось впечатление, что веб-работников лучше всего использовать для внешних сценариев, вычисляющих вещи или выполняющих другую обширную работу, которую вы теперь можете выполнять «извне». чтобы избежать длительного использования, зависания и т. д. локальных сценариев. А зачем вам когда-либо веб-работник для выполнения ajax-запроса, который является асинхронным?
 Marc08 мая 2012 г., 03:52
Просто любопытно ... что вы пытаетесь получить доступ из jQuery?

Ответы на вопрос(6)

В качестве альтернативы вы можете использоватьCheerio.

Fast, flexible & lean implementation of core jQuery designed specifically for the server.

Вам просто нужно будетbrowserify модуль и загрузкарезультирующий файл в ваш веб-работник. Затем вы сможете проанализировать ваш строковый документ и запросить его, как это делает jQuery:

$ = cheerio.load('<h2 class="title">Hello world</h2>')
tl;dr: include this script before jQuery

JQuery изначально обращается ко многимdocument свойства для проверки возможностей браузера.document не определен в Worker, и вы на самом деле не можете создатьDocument Экземпляр в веб-работников на данный момент. JQuery к этому не подготовлен - как вы могли заметить в комментариях к вашему вопросу, похоже, никто не понимает, что вы будете делать с JQuery без DOM.

Поскольку, как я уже сказал, JQuery нуждаетсяdocument чтобы инициализировать, я создал фиктивный поддельный объект документа. Этот объект действует как реальный документ во время тестов JQuery:

var document = self.document = {parentNode: null, nodeType: 9, toString: function() {return "FakeDocument"}};
var window = self.window = self;
var fakeElement = Object.create(document);
fakeElement.nodeType = 1;
fakeElement.toString=function() {return "FakeElement"};
fakeElement.parentNode = fakeElement.firstChild = fakeElement.lastChild = fakeElement;
fakeElement.ownerDocument = document;

document.head = document.body = fakeElement;
document.ownerDocument = document.documentElement = document;
document.getElementById = document.createElement = function() {return fakeElement;};
document.createDocumentFragment = function() {return this;};
document.getElementsByTagName = document.getElementsByClassName = function() {return [fakeElement];};
document.getAttribute = document.setAttribute = document.removeChild = 
  document.addEventListener = document.removeEventListener = 
  function() {return null;};
document.cloneNode = document.appendChild = function() {return this;};
document.appendChild = function(child) {return child;};

Имейте в виду, что этот поддельный документ предназначен только для загрузки jQuery, он не допускает никаких реальных операций DOM.

Example usage:
importScripts("workerFakeDOM.js");
importScripts('jquery-2.1.4.min.js');
console.log("JQuery version:", $.fn.jquery);
Test script

Позволяет попробовать различные версии JQuery с моим скриптом.

JSfiddle

Убедитесь, что вы используетеhttp://мой домен не работает сhttps://.

Download as script
 20 мар. 2016 г., 15:56
отличный обходной путь. примечание: это работает только для jquery 2+
 21 июн. 2016 г., 10:32
Я обнаружил, что это не работает для меня, к сожалению, используя 2.2.0.min, ошибка в файле jquery просто переместилась на другую строку.
 03 апр. 2017 г., 09:17
Да, это больше не работает дляjQuery 3.1.1, Я добавил свой ответ, который работает для jQuery 3.1.1

Кто-нибудь пробовал jQuery - без DOM Edition?https://github.com/kpozin/jquery-nodom.

Это небольшое подмножество библиотеки jQuery, предназначенное для использования в контекстах Web Worker, где большая часть API браузера не существует.

Это достигается главным образом путем изменения инструкций по сборке jQuery (Makefile), чтобы они включали только модули не-DOM.

Это может помочь решить проблему, поскольку эта сборка не имеет зависимости DOM, что является препятствием при импорте jQuery в веб-браузер. Попробую предоставить пример кода в ближайшее время для этого

importScripts("jQueryWhatever.js");
$.blahblahblah();

Не работает, как ожидалось? Я подозреваю, что он без проблем загрузит jQuery, но большинство вызовов, связанных с good-ole $, не будут работать должным образом, так как в WebWorker нет доступа к DOM.

 26 нояб. 2015 г., 15:31
Также выдает ту же ошибку дляdocument, который тоже не определен.
 28 нояб. 2015 г., 23:04
Что вы надеетесь сделать в пространстве для веб-работников?
 04 июн. 2015 г., 23:03
Звучит правильно. Существует не так много причин, чтобы импортировать jQuery в землю веб-работника.
 17 сент. 2014 г., 00:23
Выдает ошибку «Uncaught ReferenceError: окно не определено».

& # x161; Zato был прав, но больше не работает с более новой версией jQuery. Я добавил еще несколько для jQuery 3.1.1:

var document = self.document = { parentNode: null, nodeType: 9, toString: function () { return "FakeDocument" } };
var window = self.window = self;
var fakeElement = Object.create(document);
fakeElement.nodeType = 1;
fakeElement.toString = function () { return "FakeElement" };
fakeElement.parentNode = fakeElement.firstChild = fakeElement.lastChild = fakeElement;
fakeElement.ownerDocument = document;

document.head = document.body = fakeElement;
document.ownerDocument = document.documentElement = document;
document.getElementById = document.createElement = function () { return fakeElement; };
document.createDocumentFragment = function () { return this; };
document.getElementsByTagName = document.getElementsByClassName = function () { return [fakeElement]; };
document.getAttribute = document.setAttribute = document.removeChild =
    document.addEventListener = document.removeEventListener =
    function () { return null; };
document.cloneNode = document.appendChild = function () { return this; };
document.appendChild = function (child) { return child; };
document.childNodes = [];
document.implementation = {
    createHTMLDocument: function () { return document; }
}

еров jQuery. Проверять, выписыватьсяего плагин на GitHub.

 user96056708 мая 2012 г., 04:05
Это позволяет получить доступ к juqery в веб-работнике?
 26 нояб. 2015 г., 17:18
Нет, нет, он добавляет упаковку jQuery наWorker в основной теме. Я предполагаю, что 5 человек только проголосовали за этот ответ, даже не нажимая на ссылку.

Ваш ответ на вопрос