5

我在服务器上使用 ASP.NET 4.5,并且我有一个带有 Web 浏览器控件的 .NET Windows 应用程序,该控件导航到服务器上的网页。

如果我在使用 Internet Explorer 11 的系统上运行 Windows 应用程序,我会在导航到另一个页面时收到脚本错误:“对象不支持属性或方法 'attachEvent'”。脚本文件是 ScriptResource.axd,所以它不是我的任何脚本。

我知道 Internet Explorer 11 不再支持 attachEvent(替换为 attachEventListener?)。然而,这在这里没有多大帮助,因为 javascript 是框架的一部分,而不是在我的代码中。

我在这里找到了框架的 javascript 源代码:http: //ajaxcontroltoolkit.codeplex.com/SourceControl/latest#Client/MicrosoftAjax/Extensions/Sys/WebForms/PageRequestManager.js

// DevDiv Bugs 100201: IE does not set referrer header on redirect if you set window.location, inject anchor node instead
// dynamic anchor technique only works on IE
if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
    var anchor = document.createElement("a");
    anchor.style.display = 'none';
    // cancel bubble so body.onclick is not raised
     anchor.attachEvent("onclick", cancelBubble);
    // more code...
}

这是 Sys.Webforms.PageRequestManager 模块,据我了解,它是核心 ASP.NET 框架的一部分。

执行attachEvent的行在Internet Explorer 11 上会出现脚本错误,但在旧版本的 Internet Explorer 上效果很好。

如何解决这个问题?是否有任何已知的解决方法?我无法对此进行任何更新。

4

2 回答 2

6

尝试强制浏览器以 IE 10 模式呈现...

<meta http-equiv="X-UA-Compatible" content="IE=10" />
于 2013-11-12T14:36:39.110 回答
3

我在 jQuery 1.10 中遇到了这个问题,似乎 IE11 缺乏对 jQuery 中使用的“attachEvent”的支持,并且您的框架似乎也使用了它。有一个 Microsoft bugticket:Bugticket attachEvent IE11

我在相关的 jQuery bugticket中找到了解决方案。只需在您的框架之前插入以下代码:

var isIE11 = !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/)); 
if (isIE11) {
    if (typeof window.attachEvent == "undefined" || !window.attachEvent) {
        window.attachEvent = window.addEventListener;
    }
} 

您首先检查浏览器是否为 IE11,然后再次绑定 attachEvent 侦听器,以免再次出现错误。

于 2014-02-19T09:00:53.473 回答