我最近改用了LABjs在SharePoint Webparts(2010)中加载脚本.这样做的主要原因是,如果将多个Web部件添加到同一页面,则不要多次向页面加载相同的库(如jquery和jquery.ui).这样,他们每个人都可以单独指定其依赖关系,而无需警告已经或可能添加了哪些其他Web部件.
两者LABjs和另一个包含脚本链的文件都是通过<script>Webpart标记底部的标记加载的.
10次中有9次,Javascript执行没有任何问题.不过,每隔一段时间,就会抛出一个异常,说明TypeError: $(...).button is not a function.
即使页面上只有一个Webpart并且似乎与浏览器无关(在页面强制使用FireFox 38,Chrome 43和IE 11/IE 8中测试),也会发生这种情况.
链看起来像这样(为清晰起见编辑):
$LAB.setOptions({Debug:true})
.script("../js/jquery-1.11.3.min.js").wait()
.script("../js/jquery-migrate-1.2.1.min.js").wait()
.script("../js/jquery-ui.min.js").wait()
.script("../js/core.js")
.wait(function(){
jQuery(function() {
init(); // The jQuery UI .button() call
});
})
.script("../js/jquery.multiselect.min.js").wait()
.script("../js/jquery.multiselect.filter.min.js")
.script("../js/rte/jquery.rte.js").wait()
.script("../js/rte/jquery.rte.tb.js")
.script("../js/rte/jquery.ocupload-1.1.4.js")
.wait(function () {
jQuery(function() {
// Some DOM-dependant code lives here
});
});
Run Code Online (Sandbox Code Playgroud)
这是调试器输出的内容(为清晰起见,也进行了编辑):
start script load (ordered async): ../js/jquery-1.11.3.min.js
start script load (ordered async): ../js/jquery-migrate-1.2.1.min.js
start script load (ordered async): …Run Code Online (Sandbox Code Playgroud)