【发布时间】:2015-11-02 10:10:45
【问题描述】:
我正在使用 html5、canvas、node 和 socket.io 制作某种在线游戏。我的游戏的 html 包含一个画布标签,然后是一个标签列表,其中一些是源代码,另一些是内联的。布局是这样的:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<canvas id="myCanvas" width="640" height="640" >
Your browser does not support the HTML5 canvas tag.
</canvas>
<!-- Scripts go here -->
</body>
</html>
在 Firefox 中我的游戏运行良好,但在 chrome 中,它只执行前两个脚本:
<script src="/socket.io/socket.io.js"></script>
<script>
if(window.io) {
var socket = io();
socket.emit('identify', { client_type : 'game' });
}
</script>
这两个脚本都被正确执行了,但是在那之后,chrome 只是忽略了所有其他的脚本,这些脚本主要是定义函数和常量。例如,像这样的事情:
<script src="vector2.js" type="text/javascript;version=1.7"></script>
<script src="utils.js" type="text/javascript;version=1.7"></script>
我认为有必要提及我正在使用严格模式和一些 ES6 功能,例如 let,但即使这是问题所在,我也希望在控制台上看到一些输出。相反,我的 console.logs 和任何类型的错误都不会被打印出来。
查看调试器,我可以看到前两个脚本是如何执行的,然后它卡在这段代码的循环中(在用 -> 指向的行中)。
if (this.hasXDR()) {
xhr.onload = function(){
self.onLoad();
};
xhr.onerror = function(){
self.onError(xhr.responseText);
};
} else {
xhr.onreadystatechange = function(){
-> if (4 != xhr.readyState) return;
if (200 == xhr.status || 1223 == xhr.status) {
self.onLoad();
} else {
// make sure the `error` event handler that's user-set
// does not throw in the same tick and gets caught here
setTimeout(function(){
self.onError(xhr.status);
请注意,我没有编写此代码,我无法真正识别此库是什么。我只能说它在这个函数中循环运行。
发生了什么事?为什么我的脚本没有被执行?
【问题讨论】:
-
看起来一个请求没有完成,你能在 chrome 中查看你的
network标签来查看待处理的请求吗? -
我可以看到请求到达我的节点服务器并将脚本发回,同样在 chrome 的“网络”选项卡中,我可以看到所有脚本都加载得很好(请注意,我也可以看到它的来源,好像它们已加载,但似乎没有执行任何代码)。
-
@Setzer22 在网络选项卡上确保您正在查看
XHR请求.. -
@Pogrindis XHR 选项卡上也没有待处理的请求。不过里面有 4 个完成的 socket.io 请求。
标签: javascript html google-chrome socket.io