我遇到一个我无法解释的奇怪问题,希望有人知道可能是什么原因。
我们正在测试在4台计算机上运行的JavaScript应用程序,每个打开4个独立的镀铬窗口。
应用程序是在vanilla JavaScript中创建的,因为它在生产中的非常低规格的计算机上运行。
应用程序index.html由nginx提供,包含一个包含所有所需代码的player.js JavaScript文件。
一切正常,但每2天左右就会发生以下情况:
index.html中包含的player.js javascript文件内显示以下内容。
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 24 Jun 2017 05:25:30 GMT
Content-Type: application/javascript
Content-Length: 268068
Connection: keep-alive
ETag: "594dc946-41724"
Last-Modified: Sat, 24 Jun 2017 02:07:02 GMT
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
这会导致JavaScript错误,导致应用程序崩溃。
下面我已经包含了一段从服务器加载的JavaScript文件,以了解不需要的代码突然出现的位置。
ping: function ping() {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('GET', app.config.endpoints.heartbeat);
xhr.onload = function () {
if (xhr.status === 200) {
var status = xhr.response;
if (status) resolve(true); // is true resolve
if (!status) reject(false); // not true
} else {
app.errorHandler.warn("not able to ping " + app.config.endpoints.heartbeat);
reject(false);
}
};
xhr.onerror = function () {
app.errorHandler.warn("there was a xhr.error during ping to " + app.config.endpoints.heartbeat);
reject(false);
};
xhr.send();
});
}
};
}());
}(window, window[app]);HTTP/1.1 200 OK
Server: nginx
Date: Sat, 24 Jun 2017 05:25:30 GMT
Content-Type: application/javascript
Content-Length: 268068
Connection: keep-alive
ETag: "594dc946-41724"
Last-Modified: Sat, 24 Jun 2017 02:07:02 GMT
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
"use strict";
+function (window) {
/** Register the app name to use as the global `app` scope. */
window.app = "edgeclient";
/** The actual object that represents the `app` */
window[app] = {};
}(window);
"use strict";
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+function (window, app) {
"use strict";
/**
* @description
* Publish the `pageload` event on `DOMContentLoaded`.
*/
document.addEventListener("DOMContentLoaded", function () {
app.event.publish("pageload");
}, false);