0

当我用 LABjs 做一些测试用例时,我遇到了一些问题,代码如下:

$LAB.script('http://code.jquery.com/jquery-1.8.0.min.js')
    .script('http://id.qq.com/js/10001/simple.js');

根据API描述,jquery-1.8.0.min.js和simple.js的执行顺序不保证。我用提琴手阻止了 jquery-1.8.0.min.js,我的 boserverd 是:

  1. 在 IE8 下运行正常,simple.js 下载完成后立即执行。
  2. 在 chrome 20 中,直到 jquery-1.8.0.min.js 完成下载并执行,simple.js 才执行。

这是一个错误吗?

然后我在 chrome 20 中做了另一个测试,代码如下:

var script = document.createElement('script');
script.type = 'text/cache';
script.src = 'http://code.jquery.com/jquery-1.8.0.min.js';
document.head.appendChild(script);

运行此代码时 jquery-1.8.0.min.js 没有开始下载,是问题吗?

这是api描述: http: //labjs.com/documentation.php#script

4

1 回答 1

0

你有两个问题,所以让我分开来回答:

  1. 如果“jquery.js”在 Chrome 20 中被阻止,为什么“simple.js”不运行,但在 IE8 中按预期工作?

    嗯,我不完全知道为什么会这样。这可能不是 LABjs 中的错误,但可能是 Chrome 的一个怪癖。根据规范,它应该以 ASAP 顺序运行,这意味着“simple.js”不应该等待“jquery.js”。除了浏览器有一个怪癖/错误之外,唯一的其他解释是如果您在代码中的某个地方设置了 set $LAB.setGlobalDefaults({AlwaysPreserveOrder:true}),因为这将导致阻塞行为,就像wait()两者之间存在 a 一样。

    只是为了排除这种情况,您是否可以将代码段更改$LAB.setOptions({AlwaysPreserveOrder:false}).script(...)...为明确禁用该自动wait()行为,以防万一?

  2. type如果脚本元素的属性不是可识别的有效类型,Webkit(大约是 Chrome 11'ish)会停止获取脚本元素。因此,“文本/缓存”应该被忽略并且无法在 Chrome 20(以及所有其他浏览器,除 IE <= 9 之外的所有其他浏览器)中开始下载,因为这是规范所说的。您在 LABjs 的源代码中看到该技术的地方,它实际上被用作最后一种情况的回退,它仅适用于那些真正旧/旧的 webkit 浏览器,因为它在当时确实有效。

于 2012-08-28T17:52:46.720 回答