通过套接字发送画布元素,JS中的最大堆栈大小
Sending canvas element over socket, maximum stack size in JS
我遇到了以下问题:我想使用socket.io和Node.js通过套接字发送画布元素。我创建了以下(伪)代码:
var myCanvas = document.getElementById("myCanvas");
var ctx = myCanvas.getContext("2d");
// open sockets connection, join to the room etc.
socket.on('message', function(message) {
alert(message.canvas);
});
$(myCanvas).mouseup(function(e) {
socket.emit('message', {
canvas: myCanvas,
});
});
不幸的是,第二个对等端没有收到消息,第一个收到这个错误:
Uncaught RangeError: Maximum call stack size exceeded
来自socket.io.js文件,第5380行
感谢您的帮助
您不能发出DOM元素(myCanvas)
Socket.IO的工作原理是序列化它发送的任何内容(主要使用JSON序列化)。但是画布元素无法序列化。
您必须序列化画布内容才能发出它。例如,您可以使用myCanvas.toDataURL()
创建表示画布内容的dataURL(字符串)。
然后在听力方面,你会:
- 接收数据URL
- 将数据URL转换为新的图像对象
- 使用
context.drawImage
将新的图像对象绘制到接收器的画布上
相关文章:
- Rails File_field最大堆栈大小
- js函数堆栈传入变量,.hide()不起作用
- 通过套接字发送画布元素,JS中的最大堆栈大小
- 递归 - 测试最大堆栈大小时,调用堆栈无法弹出
- 已达到最大堆栈大小
- JS调用堆栈是否始终至少有一个帧
- 从 Express.js 路由堆栈中删除路由器
- 为什么淘汰赛.js以擅长小项目、骨干.js大项目而闻名
- 带有上下文的JS调用堆栈
- Backbone.js平均堆栈等效
- 超过了最大堆栈大小
- elasticsearch.js大容量插入错误
- 当使用API调整video.js大小时,全屏不起作用
- 观察已定义属性的值时超出了最大堆栈
- Javascript错误?每行匿名函数的最大堆栈
- 只考虑页面速度,在什么情况下CSS或JS大到可以外部化
- Angular JS大括号在对象属性名称中的破折号处停止求值
- "超过最大堆栈大小“;当使用“;这个.超级“;聚合物层次结构
- 节点.js大数字的输出格式
- 如何在node.js中设置最大堆栈大小