LABjs错误:脚本总是使用.script()来执行加载的序列
LABjs bug : scripts always excuted the sequence they are loaded using .script()
当我用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.80.min.js,我的服务器是:
- 它在IE8中运行得很好,当simple.js下载完成后,它立即执行了
- 在chrome20中,simple.js在jquery-1.8.0.min.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
您有两个问题,让我分别回答:
-
如果"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浏览器,因为它在很久以前就可以工作了。
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 如何在从浏览缓存加载页面时执行javascript
- Jquery:代码在rails中的页面加载时未执行
- 如何准确执行加载脚本&退出弹出窗口
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 加载服务器端渲染的React组件后执行脚本
- jQuery-在页面加载时执行一个函数
- ajax加载了内容,脚本没有执行
- 如何在加载完整页面后严格执行javascript代码
- 在动态加载的对话框中执行Javascript
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- 通过AJAX加载页面并执行javascript和CSS
- 在外部JS执行后加载JavaScript
- 如何在Ajax加载新内容时停止JavaScript执行
- Chrome扩展:加载窗口后执行脚本
- LABjs错误:脚本总是使用.script()来执行加载的序列
- 执行加载更多函数时的LIMIT子句
- 动态加载的SVG;似乎不再执行加载函数了
- ie7不使用jquery执行加载的脚本