我有一个 WebForms 页面,其中包含 MicrosoftAjax.debug.js (4.1.7.123) 作为脚本资源:
// Name: MicrosoftAjax.debug.js
// Assembly: AjaxControlToolkit
// Version: 4.1.7.123
// FileVersion: 4.1.7.0123
// (c) 2010 CodePlex Foundation
在加载这个脚本自我调用,最终调用这个函数:
var attachEvent = !!document.attachEvent;
...
function listenOnce(target, name, ieName, callback, isReadyState, isScript) {
function onEvent() {
if (!attachEvent || !isReadyState || /loaded|complete/.test(target.readyState)) {
if (attachEvent) {
target.detachEvent(ieName || ("on" + name), onEvent);
}
else {
target.removeEventListener(name, onEvent, false);
if (isScript) {
target.removeEventListener("error", onEvent, false);
}
}
callback.apply(target);
target = null;
}
}
if (attachEvent) {
target.attachEvent(ieName || ("on" + name), onEvent);
}
else {
if (target.addEventListener) {
target.addEventListener(name, onEvent, false);
}
if (isScript) {
target.addEventListener("error", onEvent, false);
}
}
}
问题是在 Chrome 中我收到以下 Javascript 错误:
未捕获的类型错误:对象 [object global] 没有方法“attachEvent”
在以下行:
target.attachEvent(ieName || ("on" + name), onEvent);
附加调试器的target
是 window 对象,正如您所期望的那样,Chrome 中没有该attachEvent()
方法。
document.attachEvent()
是以下函数:
function (sType, fHandler) {
var shortTypeName = sType.replace(/on/, "");
fHandler._ieEmuEventHandler = function (e) {
window.event = e;
return fHandler();
};
this.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);
}
这是 Microsoft Ajax 脚本中的错误吗?铬合金?或者它是由页面上的某些条件引起的?
无论哪种方式,我该如何解决它?