2011-05-26 29 views
1

在我的應用程序中有更多頁面已經有腳本管理器,因此我的腳本依賴於它們,但是在一些靜態頁面中腳本管理器不存在,因爲沒有使用Asp.net ajax的功能。 但即使我註冊我的客戶端腳本,如下我得到Sys is undefined錯誤,爲什麼是 那麼。asp.net腳本註冊 - 系統即使在條件使用時也未定義

if(Sys){ 
    Sys.Application.add_init(registerMyLibrary); 
} 

我也試過以下,但有什麼用時,上面的代碼本身拋出錯誤

if(Sys !== 'undefined'){ 
    //register my library 
} 

有一些其他的方式,我可以不上我的方式錯誤我的圖書館註冊?

回答

1

這是因爲它(Sys)尚未在全局對象或任何影子上下文中分配,這可能(讀取:可能是)另一個更大的問題。

無論如何,if (window.Sys) { ... }將按預期工作。

問題是查找分辨率爲失敗Sys和JavaScript引發友好的錯誤(這就是爲什麼後者形式與!==也失敗)。當試圖明確地訪問window對象的屬性時,這不是問題,如上所示。 window是瀏覽器中JavaScript的全局對象。

window.Sys !== undefined變種也可以使用,但我不喜歡它。另一種選擇是typeof Sys != "undefined",但我更不喜歡這一點。 (這是因爲typeof是一個特殊的操作符,如果查找失敗選擇返回「undefined」 - 字符串 - 不會引發異常)。

快樂編碼。

+0

真棒,我沒有想到窗口全局對象好點在那裏。只是一個簡單的問題,我如何給像我的圖書館的快捷方式像'$',jQuery的。我想要符號'§'這是很少使用。感謝 – Deeptechtons 2011-05-26 06:31:59

+0

@deeptechtons'''不是一個有效的JavaScript標識符和'窗口['§']'是不是一個快捷方式太多:-)稍微平凡:'窗口。 $$ = MyObjectOrNamespace //所有的都是jQuery'(我真的會推薦看看jQuery源代碼,這是一個很好的例子,如何編寫一個獨立的「模塊」。) – 2011-05-26 06:33:35

+0

'§'補充,所以你的上面的代碼將使用像$$('')。getName()'如果getName是我的庫中的方法?有沒有一些例子[可靠]谷歌,教我如何用類的方法包裝對象。這樣我就可以鏈接方法 – Deeptechtons 2011-05-26 06:37:40

相關問題