Просто наткнулся на (или просто заметил) аналогичную проблему с устаревшим кодом в нашем приложении.
Как и Phil.Wheeler, также используя источник данных Sitemap. Не уверен, что изменение режима рендеринга до 3.5 - это хорошо для нас, и скрипт взломал переопределение Sys.WebForms.Menu не сработал.
Проблема:
Этот код вставляется автоматически волшебно на каждой ASPX странице:
<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'ctl00_MainNavMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script>
Ни один из наших страниц не имеет элемент с идентификатором «ct100_MainNavMenu» так, мы видим яваскрипта ошибку в MenuStandards.js, разрешающем tagName === 'DIV'. этот.элемент равен нулю.
Sys.WebForms.Menu = function(options) {
this.items = [];
this.depth = options.depth || 1;
this.parentMenuItem = options.parentMenuItem;
this.element = Sys.WebForms.Menu._domHelper.getElement(options.element);
if (this.element.tagName === 'DIV') {
var containerElement = this.element;
this.element = Sys.WebForms.Menu._domHelper.firstChild(containerElement);
this.element.tabIndex = options.tabIndex || 0;
options.element = containerElement;
options.menu = this;
this.container = new Sys.WebForms._MenuContainer(options);
Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? "right" : "left");
}
else {
this.container = options.container;
this.keyMap = options.keyMap;
}
Добавление следующего в нашем мастер-файл ASPX, как последний HTML перед тегом, кажется, работает (он избавляется от проблемы):
<div id="ctl00_MainNavMenu" style="display:none">
<div id="neededToPreventSecondErrorAt_tabIndex"></div>
</div>
Визуализированного HTML выглядит следующим образом:
<div id="ctl00_MainNavMenu" style="display: none; float: left;">
<div tabindex="0" role="menubar" class="static" style="position: relative; width: auto; float: left;"></div>
</div>
Отсутствие каких-либо негативных последствий для любой из наших страниц ASPX, тестирование на IE, FF и Chrome. Ясно, что возникнет проблема, если элемент создается на странице с тем же идентификатором. Не уверен, насколько это возможно, если мы не переделаем наши меню приложений. Я не думаю, что это хуже/рискованнее, чем переопределять javascript в веб-формах.
Я думал об этом, но поскольку я привязываюсь к источнику данных Sitemap, я хочу избежать проблем с рекурсией данных, чтобы создать что-то, что должно быть «готовым». Тем не менее, если я не получу результаты, которые мне нужны, я могу пересмотреть. –