2011-05-26 56 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

相关问题