我几乎说出了我要问的问题。但是,在 asp.net 网站上是否可以将所有外部 .js 文件放在母版页上的结束正文标记之前?
我只是要摆脱 yslow 和 google speed 所显示的内容。我无法组合这些 javascript,所以我试图在“页面加载后”加载它们,但这样做会使它们毫无用处;我的一些 jquery 东西不起作用。
我将我的 .js 文件移到了开始的正文标记上方,它们可以工作。我究竟做错了什么?页面加载后我能做些什么来加载我的 .js 文件?感谢任何人可以提供的任何建议!
我几乎说出了我要问的问题。但是,在 asp.net 网站上是否可以将所有外部 .js 文件放在母版页上的结束正文标记之前?
我只是要摆脱 yslow 和 google speed 所显示的内容。我无法组合这些 javascript,所以我试图在“页面加载后”加载它们,但这样做会使它们毫无用处;我的一些 jquery 东西不起作用。
我将我的 .js 文件移到了开始的正文标记上方,它们可以工作。我究竟做错了什么?页面加载后我能做些什么来加载我的 .js 文件?感谢任何人可以提供的任何建议!
“在 asp.net 网站上是否可以在结束正文标记之前放置 javascript?”
简短的回答。是的。
长答案。这取决于javascript。
有些事情在页面加载后可能效果不佳,因为正如所写,它们只需要在 DOMReady 或之前加载某些资源,后续逻辑可能会依赖于此。也就是说,如果您有任何在 DOMReady 上添加图像的 jQuery,然后需要处理这些图像,获取它们的高度或其他什么,您可能会在页面加载时运行一些代码(在加载图像之后)。如果页面已经加载,则此策略不起作用。 onload
IIRC,不会开火两次。
一定要这样写吗?不,最好编写一些仅在验证已加载每个图像(或任何其他资源)之后运行的代码,如果您牢记正确的代码片段,这通常很容易,但事实并非如此微不足道的,要么。
“我做错了什么?在页面加载后我能做些什么来加载我的 .js 文件?”
有很多方法可以“错误地”做事情,我敢打赌,一个人可能会写一整章的各种检查,但仍然不能涵盖所有情况。我这样说并不是要阻止您尝试重写以便在页面加载后加载它们,因为我认为涵盖常见情况很容易——我只是不相信自己能准确列出最常见的情况我的头顶。
即使在 asp.net 网站中,也可以将 js 文件放在结束 body 标记之前,这通常被认为是最佳实践。但是,母版页可能会有点烦人/棘手/混乱。
从好的方面来说,你只需要引用一次 jquery(或其他)就可以了。但是,如果您在正文的控件/部分中使用 javascript/jquery,它将在加载母版页上的文件之前执行。
您可以采取以下措施来应对这些竞争条件...
将您的 javascript 包装在window.onload = function() { /*your code*/ }
. 这将等到页面完成加载(图像、外部文件等),然后再被调用。
我的选择(在 asp.net MVC 上工作)是使用RenderSection()
. 详情在这里。Webforms 中可能有等价物,也许有人可以插话。
正如他们在评论中所说,JavaScript 从上到下加载。因此,如果在您的正文中调用您在脚本中定义的函数,该函数在以后加载,您可能/将会遇到错误。您可能想要做的是将这些脚本(位于正文中间的脚本)移动到它自己的文件中,并用准备好的文档保护将它们包围。
$(document).ready(function () {
//Your code in here
});
这将保证在文档 dom 准备好之后执行代码。还要确保在您的库和依赖项之后添加此文档。
这也将使您的 JavaScript 更易于维护。