2012-08-22 74 views
2

我有一個backboneJS項目,它使用jQuery延遲對象回調加載相關文件 - 網站在桌面上,經過測試的Android設備和iOS 5.1上的iPad上加載正常 - 客戶端引起我的注意,該網站無法運行她的iPad與iOS 4.3.5。這裏是我的代碼:iOS Safari調試控制檯 - 如何獲取錯誤的行號?

$.when(
    // Load the stuff here... 
).done(
    // Call jQuery DOM ready code here... 
).fail(
    function() { 
     for(var i=0; i<arguments.length; i++) { 
      console.log(arguments[i]); 
     } 
    } 
); 

這就是在Safari發送到調試控制檯(減去console.log語句的行號):

[object Object] 
parseerror 
SyntaxError: Parse error 

好,只是不幫我在所有 - 任何想法如何在不通過15個骨幹視圖和模型盲目調試的情況下精確定位解析錯誤?任何已知的Backbone或jQuery的舊Safari iOS bug在我的故障排除研究中都遺漏了?

編輯:使用下面的版本 -

Backbone.js (unminified) 0.9.1 
jQuery (unminified) 1.8.0 
+0

檢查http://bugs.jquery.com/ticket/10037,試試一個未壓縮的jquery? – CSmith

+0

謝謝 - 我正在使用一個新的jQuery,未定型。今天早上從1.7.2更新到1.8.0規定,但是這個問題依然存在。 – Maverick

+0

JSON.stringify上的參數,讓你閱讀它說什麼? – nikoshr

回答

0

Nikoshr看法是正確的,但更具體的,你應該字符串化對象中的參數傳遞。調試控制檯將截斷所有內容,只需用調試工具的轉儲替換頁面內容即可。它不會顯示任何行號,但如果出現分析錯誤,您可能會看到該對象以某種方式搞砸了;來自ajax調用的截斷響應文本或者其他東西 - 我只提到,因爲你是// Load the stuff here所以我想象你正在使用$.getScript或其他將返回延遲對象的東西。如果是這樣,請試試這個:

$.when(
    // Load the stuff here... 
).done(
    // Call jQuery DOM ready code here... 
).fail(
    function() { 
     document.write(JSON.stringify(arguments[0])); 
    } 
); 
+0

這肯定會使'[object Object]'更加冗長,所以我可以看到對象是什麼,但它看起來並沒有「搞砸」,並且對於解析錯誤沒有任何幫助。 - 任何想法如何查明錯誤? – Maverick

1

修復了這個問題。找到一行代碼,其中屬性名稱爲class,如myObj.class = 'foo';,並且顯然class是舊JS解析器中的保留字。將其更改爲className,它工作。

在那個筆記上,我仍然想知道如何在iOS Safari調試控制檯中查看分析錯誤的行號。如果有人能提供這個答案,我會接受它。