【发布时间】:2011-01-26 10:05:30
【问题描述】:
哇,我有一个问题(甚至可能是 Daily WTF 的问题),我希望有一个解决方案。 (我很抱歉发了这么长的帖子……)
我一直在开发一个大约一个月前继承的网站。我一直在处理的部分之一是修复其中一个控件(本质上是一个动态标题栏),以便它显示用户请求的附加信息。作为这个项目的一部分,我创建了一个 Site.master 文件,这样我就不必将标题栏重新编码到每个页面中。当我第一次开始这样做时,它似乎工作得很好。我开发的所有页面看起来都很棒,并且栏已更新,因为它应该显示应该显示的信息。
好吧,当我将 Site.master(和这个控件)放到旧网站页面(我没有专门开发的页面)中时,我注意到其中一些页面看起来很糟糕,但不是全部。当我说它看起来很糟糕时,基本上,控件会将自身与页面左对齐,而不是像它应该的那样居中。我花了几个小时调试无济于事 - CSS 看起来是正确的,HTML 看起来还不错,我在 Javascript 中没有看到任何东西(尽管我确实错过了一些东西,我稍后会指出),甚至旧代码看起来是正确的(尽其所能——写得不是很好)。另一位同事看了看网站,一开始也找不到任何东西。
直到我只是想看看页面的渲染源代码(我一直在 IE8 中的开发人员视图中工作)才清楚出了什么问题。
原始开发人员在许多页面上执行搜索。为此,他在数据库中查询所有数据,然后将它们加载到页面内的 Javascript 数组中,以便访问它们。这本身就是一个大问题,因为我们谈论的是成千上万的项目,而且它显然是不可扩展的(而且,是的,网站很慢)。然而,它最终点击了搞砸 Site.master 的东西——当他将数据加载到 Javascript 数组中时,他使用大量 Response.Write(string) 调用在 Page_Load 上将数据写入 HTML。 WTF(以及让我感到困惑的事情)是他在 DOCTYPE 之前插入 Javascript,导致 IE 进入怪癖模式!
所以,因为我至少需要发布这个版本(我稍后会解决真正的问题),所以我想知道:有没有一种方法可以强制将此 Javascript 插入到 HTML 的其他位置——在 DOCTYPE 之后至少?现在,所有 Response.Write() 调用都在 Page_Load 方法中完成。我只需要稍后插入它们。
【问题讨论】:
标签: .net asp.net javascript html