通过套接字发送 canvas 元素,JS 中的最大堆栈大小
Sending canvas element over socket, maximum stack size in JS
我遇到了以下问题:我想使用 socket.io 和 Node.js 通过套接字发送 canvas 元素。我在下面创建了(伪)代码:
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 序列化)。但是 canvas 元素无法序列化。
您必须序列化 canvas 内容 才能发出它。例如,您可以使用 myCanvas.toDataURL()
创建表示 canvas 内容的数据 URL(字符串)。
那么在听力方面,你会:
- 接收dataURL,
- 将 dataURL 转换为新的 Image 对象,
- 使用
context.drawImage
将新图像对象绘制到接收者的canvas。
我遇到了以下问题:我想使用 socket.io 和 Node.js 通过套接字发送 canvas 元素。我在下面创建了(伪)代码:
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 序列化)。但是 canvas 元素无法序列化。
您必须序列化 canvas 内容 才能发出它。例如,您可以使用 myCanvas.toDataURL()
创建表示 canvas 内容的数据 URL(字符串)。
那么在听力方面,你会:
- 接收dataURL,
- 将 dataURL 转换为新的 Image 对象,
- 使用
context.drawImage
将新图像对象绘制到接收者的canvas。