__doPostBack - undefined в IE11
Используя готовое управление asp HyperLink, IE 11 сообщает об ошибке SCRIPT5009: __doPostBack - это undefined со ссылкой на ссылку:
http://msdn.microsoft.com/en-us/library/ie/xyf5fs0y(v=vs.94).aspx
Это видно в окне консоли F12 devtools.
Кто-нибудь сталкивался с этим еще и есть ли исправление? Это производственная среда.
ИЗМЕНИТЬ:
Применение исправления http://support.microsoft.com/kb/2600088 не работало для меня, и IE 10 в Windows 8 отлично работает.
Существует более поздняя статья Скотта Гензельмана с обновленной информацией. http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx Я попытаюсь выполнить эти исправления и обновить этот вопрос, но это, похоже, изолировано от окон 8.1 и IE11.
Ответы
Ответ 1
Установка .NET Framework 4.5 на ваш веб-сервер должна решить эту проблему.
http://www.microsoft.com/en-gb/download/details.aspx?id=30653
В качестве альтернативы, если вы не можете установить .NET Framework 4.5, есть исправление Microsoft для IE11: http://support.microsoft.com/kb/2836939 (Спасибо @Afract для вашего комментария)
Ответ 2
После одной и той же проблемы в течение нескольких дней мы столкнулись с этим решением:
http://connect.microsoft.com/VisualStudio/feedback/details/806542/fix-internet-explorer-11-not-detected-correctly-by-net-4-0-framework-when-custom-browser-files-are-used.
Добавить новый .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, и теперь все работает так, как должно быть.
Надеюсь, это поможет кому-то с такой же неприятной проблемой!
Ответ 3
Поместите ниже script на главной странице, это обязательно исправит. У меня была аналогичная проблема, и она была исправлена.
<script runat="server">
protected override void OnInit(EventArgs e)
{
Page.ClientTarget = "uplevel";
base.OnInit(e);
}
</script>
Ответ 4
Установка Framework 4.5 на нашем сервере требует прохождения через болото красной ленты и заполнения форм, поэтому вот что я сделал:
Перейти на сайт: http://blogs.telerik.com/aspnet-ajax/posts/13-12-19/how-to-get-your-asp.net-application-working-in-ie11
Найдите ссылку для загрузки пользовательского файла .browser с помощью исправления IE11.
Сохраните файл 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 fix)
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 (или любая версия каркаса, используемая вами)
Запустить C:\Windows\Microsoft.NET\Framework64\v4.0.30319 > aspnet_regbrowsers -i
Запустите iisreset на вашем сервере
Ответ 5
По существу, происходит то, что есть 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 исправляют это. Я определенно рекомендовал бы это.
Однако, если вы похожи на меня, работая на общедоступном веб-сайте предприятия с помощью системы cms, испеченной в .net 4, это может быть простое решение, в отличие от возможных новых ошибок, созданных при обновлении вашей платформы.
Ответ 6
Добавление конфигурационного файла браузера в App_Browsers (см. выше для XML) в Windows 2008 с IIS 7.5 работает для IE 11. На предыдущем сайте мы сделали что-то еще, но это намного проще.
Ответ 7
Ни одно исправление не работало для меня, ни обновление файла ie.browser
.
Я нахожусь на Windows Server 2008 R2.
Единственное решение, которое работало (помимо обновления до .net 4.5), - это добавление script, предложенное @vishal в этом потоке.