【问题标题】:CanvasRenderingContext2D resetTransform and google closure compilerCanvasRenderingContext2D resetTransform 和 google 闭包编译器
【发布时间】:2016-04-15 18:35:12
【问题描述】:

我偶然发现了 google 闭包编译器 ADVANCED 模式的一个奇怪行为,但我找不到解释:它重命名了 CanvasRenderingContext2D 的函数 resetTransform

由于生产代码中出现问题,我无法在此处复制粘贴,但我已经能够在此处的案例中重现该问题 https://www.dropbox.com/s/ic9l755dvgkkqv7/case.zip?dl=0

有问题的 sn-p 是:

context.resetTransform ()
context.translate ( 0 , canvas.height )

对应于编译器输出:

c.a();c.translate(0,b.height);

如果我没记错的话,resetTransform 应该保留它的名字,就像它发生在 CanvasRenderingContext2D 的其他成员身上一样,例如翻译。 浏览器找不到“a”函数并生成“TypeError: c.a is not a function”

“c”实际上是 CanvasRenderingContext2D 的一个实例,事实上,如果我将 c.a 更改为 c.resetTransform,脚本就可以完美运行。

我做错了什么?

在任何地方都找不到有关此问题的参考

目前我正在使用最新的编译器版本,下载自: https://dl.google.com/closure-compiler/compiler-latest.zip

java 版本 si 1.7.0_80,但即使是旧版本,问题仍然存在

【问题讨论】:

  • 顺便说一句,您可能应该将其标记为“javascript”问题,而不是“java”(当然闭包编译器是用 java 编写的,但您的问题是关于 javascript)。

标签: javascript html5-canvas google-closure-compiler


【解决方案1】:

resetTransform 在 mozilla.org 上被标记为 experimental feature,这解释了为什么它还没有出现在 closure_compiler/externs/browser/html5.js 中。因此,闭包编译器不知道不缩小该名称。

如果你可以build closure-compiler from source(这很容易做到),那么你可以添加到html5.js 类似

/**
 * @return {undefined}
 */
CanvasRenderingContext2D.prototype.resetTransform = function() {};

然后重建编译器。 IIRC,必须重建编译器才能对 externs 文件的更改产生任何影响。

您还可以使用添加的 API 在 https://github.com/google/closure-compiler/issues/ 提交问题或拉取请求。

可能有一种方法可以调用resetTransform,而无需在高级编译模式下将其缩小。闭包编译器不会缩小方括号访问的属性。

(/** Function */mycontext['resetTransform'])();

我从未尝试过,但我认为这会奏效。使闭包编译器对语法感到满意的确切表达式可能需要一些调整。


instructions for building closure-compiler 目前有点搞砸了。以下是一些基本说明:

获取闭包编译器存储库的本地副本:

git clone https://github.com/google/closure-compiler.git

稍后您可以根据需要更新您的副本

git pull

构建

ant clean
ant jar

检查版本:

java -jar build/compiler.jar --version

【讨论】:

  • 你也可以只在本地包含一个带有定义的 externs 文件
  • 或者向编译器项目提交拉取请求以添加定义。
  • 这解释了一切:我认为它已经过时了(毕竟有 setTransform)但什么也没找到......因为它是相反的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多