使用现成的asp HyperLink控件,IE 11给出错误SCRIPT5009:__ doPostBack未定义,其链接指向: http://msdn.microsoft.com/en-us/library/ie/xyf5fs0y(v=vs.94).aspx
这可以在F12 devtools控制台窗口中看到。
有没有人遇到过这个并且有修复吗?这是一个生产环境。
修改: 应用修补程序http://support.microsoft.com/kb/2600088对我不起作用,Windows 8上的IE 10运行正常。
Scott Hanselman最近的文章提供了最新信息。 http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx我将尝试这些修复并更新此问题,但这似乎与Windows 8.1和IE11隔离。
答案 0 :(得分:25)
在经历了几天同样的问题之后,我们遇到了这个解决方案:
将新的.browser文件添加到App_Browsers文件夹中;我们将文件命名为'IE11.browser',如果App_Browsers文件夹不存在,则创建它。
然后我们只是将上面链接中的正文复制到新创建的文件中,重新部署,现在不再有_doPostBack错误。
文件正文如下:
<browsers>
<browser id="IE11" parentID="Mozilla">
<identification>
<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
<identification>
<capability name="majorversion" match="11" />
</identification>
<capabilities>
<capability name="ecmascriptversion" value="3.0" />
<capability name="jscriptversion" value="5.6" />
<capability name="javascript" value="true" />
<capability name="javascriptversion" value="1.5" />
<capability name="msdomversion" value="${majorversion}.${minorversion}" />
<capability name="w3cdomversion" value="1.0" />
<capability name="ExchangeOmaSupported" value="true" />
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="supportsAccessKeyAttribute" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<capability name="vbscript" value="true" />
</capabilities>
</browser>
</browsers>
我们没有必要将.Net版本从4升级到4.5,现在一切正常。
希望这有助于某些人遇到同样令人沮丧的问题!
答案 1 :(得分:7)
将以下脚本放在您的母版页中肯定会修复它。我有一个类似的问题,它得到修复。
<script runat="server">
protected override void OnInit(EventArgs e)
{
Page.ClientTarget = "uplevel";
base.OnInit(e);
}
</script>
答案 2 :(得分:3)
在Web服务器上安装.NET Framework 4.5应该解决它。
http://www.microsoft.com/en-gb/download/details.aspx?id=30653
或者,如果您无法安装.NET Framework 4.5,则有一个针对IE11的Microsoft修补程序:http://support.microsoft.com/kb/2836939(感谢@Afract的评论)
答案 3 :(得分:1)
在我们的服务器上安装Framework 4.5需要涉及繁琐的繁文缛节并填写表单,所以我这样做了:
找到使用IE11修复程序下载自定义.browser文件的链接。
将telerik_ie11_browser_file_fix.zip保存到您的计算机并解压缩Telerik_IE11_fix.browser
将Telerik_IE11_fix.browser复制到C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ Browsers
的目标服务器路径在您的服务器上运行以下命令(在hanselman修复博客上查看) cd C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319(或您正在使用的任何框架版本)
运行C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319&gt; aspnet_regbrowsers -i
在您的服务器上运行iisreset
答案 4 :(得分:0)
基本上发生了什么是有2个缺少html隐藏元素“eventtarget” 和“eventargument”,以及缺少的函数“__doPostBack”。
DOM中缺少这些内容。
我尝试了为此列出的所有修复程序,但都没有。但是,使用jquery和javascript的组合有一个不显眼的解决方案。将其添加到您准备好文档的javascript中,然后即可参加比赛:
if ($('#__EVENTTARGET').length <= 0 && $('#__EVENTARGUMENT').length <= 0) {
$('#YOUR_ASPNET_FORMID').prepend('<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />');
}
if (typeof __doPostBack == 'undefined') {
__doPostBack = function (eventTarget, eventArgument) { object
var theForm = document.forms['YOUR_ASPNET_FORMID'];
if (!theForm) {
theForm = document.YOUR_ASPNET_FORMID;
}
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
};
}
据我所知,有些人说安装4.5修复此问题。我肯定会推荐。 但是,如果您像我一样在.net 4中使用cms系统在企业面向公众的网站上工作,这可能只是一个更简单的解决方案,而不是可能引入通过更新平台而产生的新错误。
答案 5 :(得分:0)
在Windows 2008上使用IIS 7.5将浏览器配置文件添加到App_Browsers(参见上面的XML)适用于IE 11.在之前的网站上我们做了其他的事情,但这更简单。
答案 6 :(得分:0)
没有修补程序对我有用,也没有更新ie.browser
文件。
我在Windows Server 2008 R2上。
唯一有效的解决方案(除了升级到.net 4.5之外)是在此线程中添加了the script suggested by @vishal。
答案 7 :(得分:0)
我发现了一个缺少带有runnat ='server'的表单标记的页面。如果这不在您的页面上,则回发将无法传回控件并正确触发任何代码
答案 8 :(得分:0)
发生的情况是,由于用户代理发生了更改,Asp.net无法将IE11识别为现代浏览器, 对于处于相同情况下的任何人,对我而言,唯一的解决方案就是数百条建议 添加setTimeout
而不是使用下面的片段
__doPostBack('ButtonPostBack', "");
使用这个
setTimeout(function () { __doPostBack('ButtonPostBack', ""); }, 1);