我们的应用中的旧代码刚刚遇到(或刚刚注意到)类似的问题。
与 Phil.Wheeler 一样,也使用站点地图数据源。不确定将渲染模式更改为 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>
我们的页面都没有 id 为 'ct100_MainNavMenu' 的元素,因此,我们在 MenuStandards.js 解析 tagName === 'DIV' 时看到了一个 javascript 错误。 this.element 为空。
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 上进行测试。显然,如果在页面上创建了具有相同 ID 的元素,就会出现问题。除非我们重做应用程序菜单,否则不确定这种可能性有多大。我不认为这比覆盖 webforms Menu javascript 更糟糕/更有风险。