Вопрос по jquery, javascript, html5 – Как получить доступ к jQuery в HTML 5 веб-работника

18

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

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

Ваш Ответ

6   ответов
4

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

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

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

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

0

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

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

Также выдает ту же ошибку дляdocument, который тоже не определен.
Что вы надеетесь сделать в пространстве для веб-работников?
Выдает ошибку «Uncaught ReferenceError: окно не определено».
Звучит правильно. Существует не так много причин, чтобы импортировать jQuery в землю веб-работника.
6

& # 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; }
}
0

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

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

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

$ = cheerio.load('<h2 class="title">Hello world</h2>')
20

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

отличный обходной путь. примечание: это работает только для jquery 2+
Я обнаружил, что это не работает для меня, к сожалению, используя 2.2.0.min, ошибка в файле jquery просто переместилась на другую строку.
Да, это больше не работает дляjQuery 3.1.1, Я добавил свой ответ, который работает для jQuery 3.1.1
1

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

Это позволяет получить доступ к juqery в веб-работнике? user960567
Нет, нет, он добавляет упаковку jQuery наWorker в основной теме. Я предполагаю, что 5 человек только проголосовали за этот ответ, даже не нажимая на ссылку.

Похожие вопросы