背景
除了发送问题,再次在Firefox 之外,页面的标签始终停留在“连接”状态,而微调器一直在旋转(参见图1)。
行为不端的浏览器 Mozilla / 5.0(X11; Ubuntu; Linux x86_64; rv:24.0)( Firefox 24.0 )
(图1 。页面加载并显示数据后的Firefox标签页)
每当我刷新网页时,我都会收到以下错误,归因于我确定的常量页面加载行为。
The connection to ws://localhost:9000/ was interrupted while the page was loading.
$(function() {
var chatSocket = new WebSocket("@routes.Application.getMetaData().webSocketURL(request)");
var sendMessage = function() {
chatSocket.send(JSON.stringify({
id: "unique",
name: "a name",
age: 22
}));
}
var receiveEvent = function(event) {
var data = JSON.parse(event.data)
document.write(data.age);
document.write(data.name);
document.write(data.message);
document.write("\n");
sendMessage();
chatSocket.close();
}
chatSocket.onmessage = receiveEvent
})
现在在过去,我一直在尝试MozWebSocket
而不是标准的WebSocket
,但是我没有在屏幕上使用该模块进行任何渲染,因为除非有一个我错过的角度, WebSocket
是最好用的。
public static WebSocket<JsonNode> getMetaData() {
return new WebSocket<JsonNode>() {
// Called when the Websocket Handshake is done.
public void onReady(WebSocket.In<JsonNode> in, WebSocket.Out<JsonNode> out) {
// For each event received on the socket,
in.onMessage(new Callback<JsonNode>() {
@Override
public void invoke(JsonNode jsonNode) {
System.out.println("Message Incoming!");
System.out.println(jsonNode.get("id"));
System.out.println(jsonNode.get("name"));
System.out.println(jsonNode.get("age"));
}
});
// When the socket is closed.
in.onClose(new Callback0() {
public void invoke() {
System.out.println("Disconnected");
}
});
ObjectNode node = Json.newObject();
node.put("message", "hello");
node.put("name", "client");
node.put("age", 1);
out.write(node);
//same result commented/uncommented
out.close();
}
};
}
因此,在 Chrome 中,流程将为:
但在 Firefox 中,流程为:
非常感谢任何诊断这些问题的帮助。我无意支持IE,但同时使用Mozilla和Chrome都会很棒。
下面是一个警告,我偶尔会在Firefox的控制台中看到“ws”协议作为罪魁祸首。它与我的问题有什么关系,我不知道。
Use of getPreventDefault() is deprecated. Use defaultPrevented instead.
答案 0 :(得分:3)
您在加载文档后调用document.write()
,然后implies document.open()
反过来替换文档,然后卸载旧文档并中止诸如超时或websockets之类的内容。
使用document.write()
以外的其他内容,您应该没问题。