我已经开始为canvas元素创建一个Undo脚本。它远非完整,但基础已经到位。该代码在Chrome,Safari和Opera中运行良好,但却在IE和Firefox中引发错误。 Firefox中的错误为NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object
,IE上的错误为Invalid calling object
。
这两个错误都与var original = context[p];
函数中的bind()
行有关。
答案 0 :(得分:1)
当您尝试在自己的代码中包装本机对象的方法时,某些浏览器不喜欢它。这是一个安全“功能”。
最好创建一个全新的对象类来包装上下文,然后代理其方法(和属性)。
这也可以避免您history.write
州的需要,因为undo
和redo
方法仍然可以访问原始方法。
答案 1 :(得分:0)
因为您的脚本缺少评论而且问题没有详细解释,所以很难弄清楚您在做什么。
但是,如果需要存储<canvas>
的状态,则需要将其所有像素复制到内存缓冲区。无法克隆Canvas或上下文对象,因为它们绑定到当前UI状态。
要访问画布数据,请使用getImageData()
* HTTPS://developer.mozilla.org/en-US/docs/DOM/CanvasRenderingContext2D#getImageData%28%29
并使用相应的put像素调用恢复它。