HTML5 Canvas撤消在IE或Firefox中无法正常工作

时间:2012-08-21 00:32:15

标签: javascript canvas html5-canvas

我已经开始为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()行有关。

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

2 个答案:

答案 0 :(得分:1)

当您尝试在自己的代码中包装本机对象的方法时,某些浏览器不喜欢它。这是一个安全“功能”。

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

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

答案 1 :(得分:0)

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

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

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

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

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