当我用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的执行顺序。我用fiddler阻止了jquery-1.8.0.min.js,我的boserverd是:
这是一个错误吗?
然后我在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没有开始下载,这是问题吗?
答案 0 :(得分:0)
你有两个问题,所以让我分开来看看:
如果“jquery.js”在Chrome 20中被阻止,为什么不运行“simple.js”,但在IE8中按预期工作?
嗯,我不完全知道为什么会这样。它可能不是LABjs中的错误,但它可能是Chrome的一个怪癖。根据规范,应该以ASAP顺序运行,这意味着“simple.js”不应该等待“jquery.js”。除了浏览器有一个怪癖/错误之外,唯一的其他解释是,如果代码中的某个位置设置了$LAB.setGlobalDefaults({AlwaysPreserveOrder:true})
,因为这会导致阻塞行为,就像在两者之间存在wait()
一样
仅仅为了排除这一点,您是否可以将代码段更改为$LAB.setOptions({AlwaysPreserveOrder:false}).script(...)...
以明确禁用该自动wait()
行为,以防万一?
如果他们的type
属性不是公认的有效类型,则Webkit(大致是Chrome 11'ish)停止提取脚本元素。所以“text / cache”应该被忽略,无法在Chrome 20(以及所有其他浏览器,除此之外,IE< = 9)开始下载,因为这是规范所说的。如果您在LABjs的源代码中看到该技术,它实际上被用作最后一种情况回退,它仅适用于那些真正的旧/旧webkit浏览器,因为它当时的DID工作方式。