2011-10-06 48 views
3

我們有一個很大的GWT應用程序。由於一些日子裏,我們已經有了在歌劇奇怪的錯誤,其他所有的瀏覽器都很好:GWT:歌劇的JavaScript錯誤

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

我有谷歌爲「輸入嵌套太深」,但無法找到與我們的任何問題。它很難調試,因爲你不能在開發模式下運行應用程序,但只能使用編譯的JavaScript。

+0

在最壞的情況下,嘗試回滾直到錯誤消失。至少你會知道你的代碼中有什麼變化產生了錯誤。 – Barth

+0

'LIf + A9c.b.b'什麼是最後的'b'?因爲標記清楚地指向那裏。你用什麼版本的Opera(舊/ 11.51/alpha 12)? – c69

+0

@ c69:不知道b是什麼導致其編譯代碼 –

回答

2

Carakan的解析器是一個相當簡單的遞歸體例。因此,爲了避免堆疊,輸入令牌存在深度限制。嵌套的「+」表達式可能會導致它,儘管有一些保護措施可以防止這種情況發生(儘管我忘記了具體的內容,稍後會進行檢查和編輯)。

0

響應很遲,但可能對其他用戶有幫助嗎?

Opera(或Opera Mini在我們的例子中)仍然可以窒息深層嵌套的表達式。谷歌的Closure Compiler或UglifyJS等縮小工具將重新編譯Javascript源代碼,並且可以引入比原始源代碼更復雜(更深入)的表達式。

對於Ruby on Rails 4中的Uglifier,關閉compress.sequences通常足以解決問題。在配置/環境/ production.rb

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