如何访问的jQuery的HTML 5网络工作者(How to access jQuery in HT

2019-06-24 06:12发布

我无法访问的jQuery的HTML5内部网络工作者 。 有没有一种方法,我能做到这一点?

Answer 1:

TL;博士:包括这个脚本的jQuery之前

JQuery的initally访问大量的document属性进行检查浏览器的功能。 document中没有工人定义,你实际上无法创建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操作。

实例:

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

测试脚本

让您尝试JQuery的各种版本与我的脚本。

的jsfiddle

请检查您使用http:// ,我的域名不工作https://

下载为脚本



Answer 2:

托马什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; }
}


Answer 3:

有没有人尝试了jQuery - 无DOM版? https://github.com/kpozin/jquery-nodom 。

这是jQuery库用于在Web工作环境中使用,其中大部分的浏览器API不存在的一小部分。

这主要是通过修改的jQuery建立指令(生成文件),以仅包括非DOM模块来实现的。

这可能有助于解决这个问题,因为这构建没有DOM的依赖,在webworker进口的jQuery时,这是一个障碍。 将尝试很快为此提供一些示例代码



Answer 4:

有一个很好的插件,通过jQuery的自己的领导人之一来使用Web工作与jQuery。 看看他在GitHub上的插件 。



Answer 5:

是否使用:

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

无法按预期工作? 我怀疑它会加载jQuery的不麻烦,但大部分都好极了$相关的呼叫将不能按预期是有WebWorker内没有访问DOM。



Answer 6:

作为替代方案,你可以使用Cheerio

快速,灵活和实施精益专为服务器设计的jQuery核心的。

你只需要简单地browserify模块,并加载生成的文件到您的网络工作者。 然后,您将能够分析您的字符串的文件,并查询像jQuery不会:

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


文章来源: How to access jQuery in HTML 5 web worker