HTML5 Canvas undo是'在IE或Firefox中无法正常工作

HTML5 Canvas undo isn't working properly in IE or Firefox

本文关键字:常工作 工作 Firefox undo Canvas IE HTML5      更新时间:2023-09-26

我已经开始为画布元素创建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

这两个错误都与bind()函数中的行var original = context[p];有关。

这是我的代码:http://jsfiddle.net/evankennedy/cDdJd/

有些浏览器不喜欢在自己的代码中包装本机对象的方法。这是一项安全"功能"。

您最好创建一个全新的对象类来包装上下文,然后代理其方法(和属性)。

这也将避免对history.write状态的需要,因为undoredo方法仍然可以访问原始方法。

因为您的脚本缺少注释,而且问题没有详细解释,所以很难弄清楚您在做什么。

但是,如果需要存储<canvas>的状态,则需要将其所有像素复制到内存缓冲区。画布或上下文对象无法克隆,因为它们已绑定到当前UI状态。

要访问画布数据,请使用getImageData()

*https://developer.mozilla.org/en-US/docs/DOM/CanvasRenderingContext2D#getImageData%28%29

并用相应的put像素调用来恢复它。