Javascript 页面刷新时动态加载脚本标记失败
我正在用AngularJS开发一个web应用程序,因此我们有很多脚本标记。出于调试的目的,我们希望将它们单独加载,但我们也使用一个普通的HTML页面,因此我们没有ASP.net捆绑等的奢侈 为了便于使用,我打算创建一个JS文件来加载所有其他文件,这样我们的所有开发人员只需在页面上放置一个文件,他们就可以更新函数读取的主列表 当我运行应用程序时,这在初始页面加载时非常有效,但当我刷新页面时,所有内容都被彻底破坏了 我正在寻找一个修复方法,或者一个更好的加载脚本的方法 Javascript: 首先定义要加载的脚本:Javascript 页面刷新时动态加载脚本标记失败,javascript,Javascript,我正在用AngularJS开发一个web应用程序,因此我们有很多脚本标记。出于调试的目的,我们希望将它们单独加载,但我们也使用一个普通的HTML页面,因此我们没有ASP.net捆绑等的奢侈 为了便于使用,我打算创建一个JS文件来加载所有其他文件,这样我们的所有开发人员只需在页面上放置一个文件,他们就可以更新函数读取的主列表 当我运行应用程序时,这在初始页面加载时非常有效,但当我刷新页面时,所有内容都被彻底破坏了 我正在寻找一个修复方法,或者一个更好的加载脚本的方法 Javascript: 首先定
var scripts = {
libs: [
"jquery/jquery-1.10.2.js",
"angularjs/angular.js",
"kendo/2014.2.716/kendo.all.min.js",
"d3/d3.js"
],
modules: [
"hiModule.js"
],
common: [
"Classes.js"
],
components: [
"contentArea/contentAreaCtrl.js",
"kendoGrid/kendoGridDir.js",
"kendoGrid/kendoGridCtrl.js",
"kendoGrid/kendoGridSvc.js",
"login/loginDir.js",
"login/loginCtrl.js",
"search/searchCtrl.js",
"search/searchDir.js",
"sidebar/sidebarDir.js"
],
services: [
"sessionTrackerSvc.js"
]
};
然后构建脚本URL并将其添加到文件队列:
function buildScriptUrls() {
var i;
for (var key in scripts) {
if (key) {
var fileUrl;
var arrayLength = scripts[key].length;
for (i = 0; i < arrayLength; ++i) {
if (key === "libs") {
fileUrl = "Scripts/libs/" + scripts[key][i];
} else if (key !== "modules") {
fileUrl = "Scripts/SPEnterprisePortal/" + key + "/" + scripts[key][i];
} else {
fileUrl = "Scripts/SPEnterprisePortal/" + scripts[key][i];
}
fileQueue.push(fileUrl);
}
}
}
}
实际执行发生在脚本底部的IIFE中:
var fileQueue = [];
buildScriptUrls();
var counter = fileQueue.length;
appendChild();
您会注意到,该函数从脚本列表的末尾开始,并反向运行。这是因为我的函数调用具有嵌套性质。所有脚本都已创建,但每个appendChild函数都会调用自身,并且在加载脚本之前不会将脚本追加到页面。因此,调用的最后一个脚本首先添加到页面中,因此函数需要向后运行
这是我自己的发明,所以我肯定有更好的方法,但现在我只是想弄清楚为什么它在加载时工作良好,然后在页面刷新时,一切都中断了
谢谢 什么样的刷新会破坏东西?control+F5=中断,但第二次页面正常工作?看起来任何刷新都会中断它:Ctrl+F5,F5,Ctrl+R。但再一次,调试时从Visual Studio首次启动运行正常,如果我在调试时在其他浏览器中打开它,它也正常工作。您是否启动了类似fiddler的http监视程序?也许你得到了一些404?我得到了,但应该多加注意。当重新加载失败时,这是因为浏览器正在为所有脚本抛出一个304。
var fileQueue = [];
buildScriptUrls();
var counter = fileQueue.length;
appendChild();