IE8中如何保证javascript在body结束标记之前的加载顺序

IE8中如何保证javascript在body结束标记之前的加载顺序,javascript,jquery,html,internet-explorer-8,pagespeed,Javascript,Jquery,Html,Internet Explorer 8,Pagespeed,为了优化我的网站以提高谷歌页面速度,我在body标签的末尾插入了我的js文件,这样它们就不会延迟网站的呈现。这在所有现代浏览器中都能正常工作,在IE版本9之前也是如此 嵌入脚本的html如下所示: <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <script type="text/javas

为了优化我的网站以提高谷歌页面速度,我在body标签的末尾插入了我的js文件,这样它们就不会延迟网站的呈现。这在所有现代浏览器中都能正常工作,在IE版本9之前也是如此

嵌入脚本的html如下所示:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript" src="scripts/init.min.js"></script>
</body>
</html>

我已经通过saucelabs测试了该网站,以检查它是否在旧的InternetExplorer8中工作

令人惊讶的是,在IE8中,我收到了一条错误消息。我意识到,之所以会出现这个错误,是因为我的自托管javascript是在加载Google托管的jquery之前执行的——尽管我首先链接了jquery,如上所示。当我自己托管jquery并在jquery文件末尾直接复制脚本以减少http请求时,错误消息消失了,一切正常

现在我的问题是:我是否遗漏了一些关于脚本加载顺序的信息,或者IE8不会从google加载jquery还有其他原因吗? 实际上,我希望依赖jquery的CDN版本,因为在我的服务器上不可能激活压缩,而且jquery是相当大的数据块。顺便说一句,这个问题只出现在Windows XP下的IE8中–在Windows 7下的IE8中,上面显示的解决方案似乎也可以正常工作。

这是正常的,IE8可能会出现这种情况

您可以在服务器上托管自己的jQuery,也可以删除jQuery脚本标记并从init.js加载库

一种方法是使用loadScript函数,如上所示


通过这种方式,您可以确保在开始使用jQuery之前加载它。

好的,实际上我不知道问题的确切原因,但我找到了一个干净的解决方案: 正如@Pointy正确地指出的那样,问题在于jquery根本没有加载。我通过将链接从“https”更改为“http”来解决这个问题

发件人:


进入:


现在一切正常


我希望这个答案能帮助某人节省一些时间。也许有人可以详细解释为什么需要进行这种修改

如果不指定脚本是异步的,则按顺序加载。一定是出了什么问题。你说过标签是“类似这样的”——好吧,这是编程,细节很重要。例如,如果其中任何一个在某个地方有
async
defer
,这将改变很多。@MichelTomas:我将它包装在
$(文档)中。ready(function(){
。我知道这是没有必要的,因为第二个脚本无论如何都应该在jquery之后加载。但既然不是这样…@T.J.Crowder:No
async
defer
。很抱歉,我的语言不准确–它不是这样的,而是和我描述的完全一样。这个错误是由脚本引起的结论是错误的加载顺序错误(不会发生这种情况)看起来很脆弱。你有没有尝试过像删除一个带有内联代码的简单的
来检查
$
是否定义在另外两个
标记之间?你是说从另一个域加载的文件本质上是异步的?实际上,浏览器应该一个接一个地加载脚本-因为我没有激活vated异步加载。如果不使用一个javascript和依赖CDN,你会看到任何解决方案吗?因为我无法压缩我的Web空间上的文件。不,我是说IE8在CDN上甚至在常规脚本上都有一些奇怪的行为。由于我无法查看页面,我无法确切地说出问题出在哪里,但我遇到了这个问题准备好jQuery的CDN了。通过使用一个javascript文件,并从这个文件加载外部脚本,解决了这个问题。(顺便说一句,这允许页面呈现得更快)不,IE8没有被破坏(以这种方式)。无论您以前遇到过什么问题,这都不是因为IE8从根本上错误地处理了脚本标记,或者神奇地无法从其他浏览器可以下载的某些URL下载。如果是这样的话,考虑到IE8有多旧,这将是众所周知的。需要支持性的第三方证据。@t.J.Crowder:我暂时的解决方法可以在这里被看到(但我对此不满意)我已经通过php将javascript直接包含到页面中。它也可以通过链接而不是包含它来工作。我之所以包含它,是因为这样可以获得更好的页面速度评级,因为我无法在我的Web空间中压缩脚本。您是否通过
http
https
加载页面这些脚本标记?如果是后者,也许不久前,您将混合内容警告改为“禁用”,这告诉IE8不要在安全页面上以静默方式加载不安全的内容。默认值为“提示”。通过
http
-真奇怪…这很奇怪。好吧,下面是使用协议相关URL的另一个好理由。:-
loadScript("https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js", init);

function init() { // your init.min.js code goes here }
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>