如何将函数传递给 JavaScript Web Worker

2024-06-19

我想通过一个(或多个)函数传递postMessage()给网络工作者,因为我无法引用常规文件。

为了启动 Web Worker,我将一个对象 URL(从 Blob 创建)传递给Worker构造函数。然后我传递一条消息,但到目前为止还没有在消息中添加函数。

(JSON)消息不能直接包含函数(按规定),虽然 importScripts 理论上是允许的,但到目前为止我在 Chrome 或 Firefox 中还没有成功使用它。

html 文件的正文:

<div id="divText">1234</div>
<script>
    var greeter = function greet(name) {
        return "hello " + name;
    };
    function webWorkerWorker() {
        self.postMessage("started1");
        self.onmessage = function(event) {
            importScripts(event.data.content);
            self.postMessage("importScripts success");
            var result = greeter("john");
            self.postMessage(result);
        };
    }
    var functionBody = mylib.extractFunctionBody(webWorkerWorker);
    var functionBlob = mylib.createBlob([functionBody]);
    var functionUrl = mylib.createObjectURL(functionBlob);

    var functionBody2 = mylib.extractFunctionBody(greeter);
    var functionBlob2 = mylib.createBlob([greeter]);
    var functionUrl2 = mylib.createObjectURL(functionBlob2);

    var worker = new Worker(functionUrl);
    worker.onmessage = function(event) {
        document.getElementById("divText").innerHTML = event.data;
    }
    worker.postMessage({
                type: "init",
                content: functionUrl2
            });
</script>

目前,它导致将 divText 值设置为“importScripts success”。

难道我做错了什么?是否有另一种方式可以将函数传递给网络工作者?还是不可能?


事实证明这个方法工作正常,只是我的工作人员有一个错误:

var result = greeter("john");

应该

var result = greet("john");

这是有道理的 - 我将greeter变量传递给worker,但它没有理由知道我传递的对象的变量名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将函数传递给 JavaScript Web Worker 的相关文章

随机推荐

  • 如何设置 Twitter 的嵌入时间线宽度百分比(响应式/流体设计)

    我正在寻找设置Twitter 的嵌入时间线 https dev twitter com docs embedded timelines 当您有固定的设计时 这很容易 但这不是我的情况 我实际上正在为新网站构建流畅且响应式的设计 我的问题是
  • EJS在JS onload函数中访问express变量

    我知道你可以像这样获取 ejs 文件中变量的值 h1 h1 如果我要在同一个 ejs 页面的 onload javascript 函数中使用相同的标题变量 我将如何使用它 例如 这个函数产生一个控制台错误说 未捕获的语法错误 意外的标识符
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 如何从 Google Custom Search API 获取超过 100 个结果

    我正在尝试使用 Google Custom Search API 在 Java 中进行研究 因此 我需要为每个查询提供一个大的结果集 然而 我似乎仅限于前 100 个结果 这比我需要的要少得多 我使用这样的列表方法 list setStar
  • PhpPresentation imagecreatefromstring():数据不是可识别的格式 - PHP7.2

    我正在尝试使用 PhpPresentation 来阅读sample pptx使用文档中为读者提供的简单说明进行文件处理 我得到 imagecreatefromstring Data is not in a recognized format
  • Jenkins 无法访问 SVN (https://)

    我创建了 Jenkins 项目 该项目在 SVN 上有文件 https repo xxx xxx svn priv 项目名称 https repo xxx xxx svn priv projectname 证书是自签名的 我的问题是 Jen
  • 将具体数据放在jqgrid摘要视图标题中

    我有一个工作 jqgrid 表 在标题上有摘要视图 就像我在这个 plunkr 中实现的示例一样http plnkr co edit wjIlaVMsa9vusmfhgfL1 p preview http plnkr co edit wjI
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 将成员函数作为参数传递/c++

    我想用 C 实现一个类b可以通过封装该迭代器类型的成员集进行某种迭代 喜欢 b object for each x do function f so 函数 f会得到每个人的x成员并做任何事情 比方说 void function f x me
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • 当我更改浏览器选项卡时,Jquery Animate 停止

    我的投资组合中有一个疯狂的问题 http hericdk com http hericdk com 我用jquery做了一个简单的动画 一个太空飞船飞行的动画 然后就出现了我的作品 这个想法不错 大家都喜欢 但问题是 由于某种奇怪的原因 当
  • 人们今天使用的可扩展语言是什么?

    维基百科说 可扩展编程是计算机科学中使用的一个术语 描述一种计算机编程风格 重点关注扩展编程语言 编译器和运行时环境的机制 例如 Tcl 允许您编写自己的控制结构 看here http wiki tcl tk 685 我有兴趣编制在实际代码
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 在 iOS 中从 ACAccountStore 获取 Facebook uid?

    您好 我想获取 Facebook 用户的 UIDAC帐户商店在 iOS 6 中 self accountStore ACAccountStore alloc init ACAccountType FBaccountType self acc
  • 如何将函数传递给 JavaScript Web Worker

    我想通过一个 或多个 函数传递postMessage 给网络工作者 因为我无法引用常规文件 为了启动 Web Worker 我将一个对象 URL 从 Blob 创建 传递给Worker构造函数 然后我传递一条消息 但到目前为止还没有在消息中