GWT:opera出现JavaScript错误

GWT:opera出现JavaScript错误,javascript,gwt,opera,Javascript,Gwt,Opera,我们有一个大型GWT应用程序。因为有些天我们在opera中遇到了一个奇怪的错误,所以所有其他浏览器都可以: Syntax error at line 3739 while loading: f+Gcd(ead)+LIf+A9c.b.b+RIf+Icd(ead)+LIf+ --------------------^ input too deeply nested 我在谷歌上搜索过“输入嵌套太深”,但找不到任何与我们的问题相关的东西。很难调试,因为你不能在开发模式下运行应用程序,只能使用编译好的J

我们有一个大型GWT应用程序。因为有些天我们在opera中遇到了一个奇怪的错误,所以所有其他浏览器都可以:

Syntax error at line 3739 while loading:
f+Gcd(ead)+LIf+A9c.b.b+RIf+Icd(ead)+LIf+
--------------------^
input too deeply nested

我在谷歌上搜索过“输入嵌套太深”,但找不到任何与我们的问题相关的东西。很难调试,因为你不能在开发模式下运行应用程序,只能使用编译好的JavaScript。

Carakan的解析器是一个相当简单的递归解析器。因此,为了避免破坏堆栈,对输入标记有一个深度限制。嵌套的“+”表达式可能会导致此问题,尽管对此有一些保护措施(尽管我忘记了确切的原因,稍后将检查并编辑此内容)。

响应很晚,但可能对其他用户有帮助

Opera(在我们的例子中是Opera Mini)仍然会被深度嵌套的表达式阻塞。谷歌的闭包编译器(Closure Compiler)或UglifyJS等小型化工具将重新编译Javascript源代码,并可能引入比原始源代码更复杂(更深入)的表达式

对于RubyonRails4,关闭compress.sequences通常就足以解决问题。在config/environments/production.rb中:

config.assets.js_compressor = Uglifier.new(:compress => {:sequences => false})

在更糟糕的情况下,尝试回滚,直到错误消失。至少您会知道是什么更改导致了错误。
LIf+A9c.b.b
最后一个
b
是什么?因为马克清楚地指出了这一点。你用的是什么版本的Opera(旧版/11.51/alpha 12)?@c69:不知道b是什么,因为它的编译代码是HMM。。尝试Opera的最新alpha版本,如果问题仍然存在,只需开始旧式调试。。通过回滚/注释代码块,直到找到违规者。因为我在谷歌上找不到这个错误,所以你可能是第一个在互联网上真正提到触发它的人。你可能想签出或查看Opera的Browser.js文件。预处理脚本以避免“嵌套太深的输入”错误,Opera的ES引擎在qq.com上的内部限制太低。(此修补程序似乎将下划线.js的调用替换为它们的结果,因为它在页面脚本中搜索类似于
++(“anychar”)+
的模式,并将它们替换为
+(“anychar”)
操作的结果。