41

我想知道我是否可以在 web worker 文件中使用 jQuery。谷歌浏览器给了我这个错误:“Uncaught ReferenceError: $ is not defined”。

这是代码:父文件:

var loader = new Worker(BASE_URL + "js/rss_loader_worker.js");
// Ask the worker to start loading the RSS from the server
loader.postMessage("loadRss");
// When receive the response from the server
loader.onmessage = function (event) {
  console.log(event.data);
}

工人档案:

onmessage = function (event) {
  if (event.data === "loadRss") {
    loadRss();
  }
}

/**
 * This function handles the AJAX request to the server side
 * then pass the content to the view page
 * @param none
 * @return html text
 */
loadRss = function () {
  $.ajax({
    data: {city: CITY_LOCATION},
    url: BASE_URL + "/getfeeds",
    onsucess: function (data) {

    }
  });
}

请帮忙,谢谢:)

4

6 回答 6

39

不,你不能。无法访问非线程安全组件或 DOM,您必须通过序列化对象将特定数据传入和传出线程。所以你必须非常努力地在你的代码中引起问题。jQuery 是一个 JavaScript DOM 库

但是,您可以在您的工作人员中使用本机XMLHttpRequest

而且,导入外部脚本不会通过带有script标签的页面:在您的工作文件中使用importScripts()

于 2011-01-29T19:20:04.670 回答
25

这是我发现的:

您可以使用该函数将外部脚本文件或库加载到工作程序中 importScripts()

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-enviornment-loadingscripts

importScripts('script1.js');
importScripts('script2.js');

或者

importScripts('script1.js', 'script2.js');

虽然,你不能加载 jQuery,因为 jQuery 需要 DOM 访问,而 web 工作者没有。

于 2012-01-24T18:56:27.690 回答
4

由于 Web Worker 位于外部文件中,因此他们无权访问以下 JavaScript 对象:

  • 窗口对象
  • 文档对象
  • 父对象

所以你不能在工作文件中使用 $ 。更好的是你可以使用像这样的传统 AJAX

if (window.XMLHttpRequest)
{
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
}
else
{
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

参考http://www.w3schools.com/html/html5_webworkers.asp

于 2014-02-24T10:08:49.823 回答
3

jQuery 主要用于处理 DOM 和处理网页。所以它不太适合没有访问 DOM 的 Web Workers。

您可能想要使用实用程序库而不是 DOM 库,例如underscore.js,或者也许有人应该制作一个 jQuery Worker 库,这是 jQuery 的精简版,没有所有 DOM 操作功能,只保留实用程序功能.

于 2013-09-02T13:10:30.607 回答
2

Node.JS 中的执行环境也缺少原生 DOM 实现。我认为可以公平地说 Node.JS 和 HTML5 Web Workers 共享某些限制。

为了在 Node.JS 中使用 jQuery,有多种方法可以模拟 DOM 实现。如果您仍然想在 Web Workers 中使用 jQuery,我认为您应该搜索 Node.JS 解决方案,看看它们是否适用。

于 2011-06-08T05:35:49.620 回答
1

看看这个插件https://github.com/rwldrn/jquery-hive

于 2011-08-05T15:14:02.253 回答