asp.net脚本注册 - 即使使用if条件,系统也未定义

时间:2011-05-26 06:16:36

标签: c# javascript asp.net asp.net-ajax

在我的应用程序中,更多页面中有脚本管理器因此我的脚本依赖于它们加载但在某些静态页面中脚本管理器不存在,因为没有使用Asp.net ajax的任何功能。 但即使我注册我的客户端脚本如下,我得到Sys is undefined错误,为什么 就是这样。

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

我也在下面尝试过,但是当上面的代码本身抛出错误时会有什么用处

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

还有其他方法我可以在没有错误的情况下注册我的库吗?

1 个答案:

答案 0 :(得分:1)

这是因为它(Sys)尚未在全局对象或任何阴影上下文中分配,这可能是(读:可能是)另一个更大的问题。

无论如何,if (window.Sys) { ... }将按预期工作。

问题是 Sys的查找解析失败,JavaScript引发了错误(这就是为什么后一种形式!==也失败了)。尝试显式访问window对象的属性时,这不是问题,如上所示。 window方便地是浏览器中JavaScript中的全局对象。

window.Sys !== undefined变体也可以使用,但我不喜欢它。另一种选择是typeof Sys != "undefined",但我更不喜欢这个。 (这是有效的,因为typeof是一个特殊的运算符,如果查找失败则选择返回“undefined” - 字符串 - 而不会引发异常。)

快乐的编码。