【问题标题】:Is it possible to load JavaScript file in a WebWorker?是否可以在 WebWorker 中加载 JavaScript 文件?
【发布时间】:2017-12-11 16:27:40
【问题描述】:

我有一个 WebWorker,我从它开始

new Worker("worker.js");

在这个工作人员中,我尝试通过

加载所需的 JavaScript 文件,但没有成功
self.importScripts("NeededJs.js");
const m = new NeededJs();

如何解决这个问题并在我的 WebWorker 中包含所需的 JavaScript 文件?

编辑:

我收到错误消息:

Uncaught ReferenceError: NeededJs 未定义

谢谢

这是我需要包含的文件 File I need to Inlcude

【问题讨论】:

  • 定义“没有成功”。你的意思是你有例外吗?有什么例外?你的意思是你没有错误,但其他东西不起作用?请提供更多详细信息。
  • 只是为了确定......“NeededJs.js”文件包含一个名为NeededJs的“全局”可用类?如果没有,它是否包括 this.NeededJs = NeededClass 之类的东西?
  • 请查看我发布的链接。
  • 只是为了说明这一点 - NeededJs 没有在您的文件中定义。所以错误Uncaught ReferenceError: NeededJs is not defined是正确的。
  • 您的问题与您正在尝试做的事情不完全匹配。您正在尝试从 Worker 加载 Node.js 模块。为此,您需要查看一些像 browserify 或类似的库。我要做的是下载你自己的库副本,去掉加载函数和其他东西,然后离开 WebMonkeys 构造函数。然后只需从您的工作人员加载您的修剪库。我对其进行了测试,我可以向您保证它可以正常工作(顺便说一句,如果禁用了 OffscreenCanvas,您需要在浏览器中启用它)。

标签: javascript web-worker


【解决方案1】:

是的,这是可能的。你应该注意到它是一个全局函数,所以删除self.

来自:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

工作线程可以访问全局函数 importScripts(),它允许它们导入脚本。它接受零个或多个 URI 作为要导入的资源的参数;以下所有示例均有效:

注意:脚本可以按任何顺序下载,但将按照您将文件名传递给 importScripts() 的顺序执行。这是同步完成的; importScripts() 直到所有脚本都被加载和执行后才会返回。

此外,当您为导入的文件使用模块模式时,您需要传递一个选项来指定:

来自:https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker

new Worker("worker.js", {type:"module"});

【讨论】:

  • 没有工作我不得不说我将工作人员加载为 Blob。
  • @Zca89 我认为这可能是您问题的重要信息。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多