0

我已经开始为画布元素创建撤消脚本。它远未完成,但基础已经到位。该代码在 Chrome、Safari 和 Opera 中运行良好,但在 IE 和 Firefox 中抛出错误。FirefoxNS_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/evnkennedy/cDdJd/

4

2 回答 2

1

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

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

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

于 2012-08-21T08:46:45.133 回答
0

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

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

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

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

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

于 2012-08-21T08:18:46.793 回答