GWT:Opera的JavaScript错误

时间:2011-10-06 06:43:01

标签: javascript gwt opera

我们有一个大型GWT应用程序。有些日子我们在歌剧中遇到了一个奇怪的错误,所有其他浏览器都很好:

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

我谷歌“输入太深嵌套”但找不到与我们的问题相关的任何内容。它很难调试,因为你无法在开发模式下运行应用程序,但只能使用已编译的JavaScript。

2 个答案:

答案 0 :(得分:2)

Carakan的解析器是一个相当简单的递归 - 正确的解析器。因此,为了避免吹动堆栈,输入令牌存在深度限制。嵌套的“+”表达式可以导致它,虽然有一些保护(虽然我完全忘记了什么,将在以后检查和编辑)。

答案 1 :(得分:0)

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

Opera(在我们的例子中是Opera Mini)仍然可以阻塞深层嵌套的表达式。诸如Google的Closure Compiler或UglifyJS之类的缩小工具将重新编译Javascript源代码,并且可以引入比原始源所暗示的更复杂(和更深层)的表达式。

对于Ruby on Rails 4中的Uglifier,关闭compress.sequences通常足以解决问题。在 config / environments / production.rb

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