我有一个网页,它使用websockets定期更新各种文本字段。在现代Web浏览器中打开时,此页面按预期工作。当我尝试在QWebView中打开此页面时,字段不再更新。
我检查了websocket支持:
QString mystr = "if (window.WebSocket) {alert('No WS Support');}";
view->page()->mainFrame()->evaluateJavaScript(mystr);
这会产生一个警告框,所以我假设QWebView无法使用websockets。 (这是有道理的,因为我坚持使用Qt 4.8,到目前为止已经很老了)
编辑
我发现在javascript中测试websocket支持时,我做错了if语句。无论哪种方式,我仍然在努力让qwebview中的字段更新,就像它们在现代浏览器上一样。
接下来我决定尝试使用QSslSocket来执行websocket升级请求,这似乎没问题。
以下是我的代码:
socket.connectToHost("127.0.0.1",80);
if(!socket.waitForConnected())
qDebug() << socket.errorString();
qDebug()<<socket.write("GET /crown HTTP/1.1\r\n"
"Host: 127.0.0.1\r\n"
"Upgrade: websocket\r\n"
"Connection: Upgrade\r\n"
"Origin: http://127.0.0.1\r\n"
"Accept-Encoding: gzip, deflate, sdch\r\n"
"Accept-Language: en-US,en;q=0.8\r\n"
"Sec-WebSocket-Key: WN3k1L3mft8HTM0bgZcP/A==\r\n"
"Sec-WebSocket-Version: 13\r\n"
"Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n"\r\n");
while (socket.waitForReadyRead())
qDebug() << socket.readAll().data();
while循环和qDebug从服务器产生适当的升级响应以及我的websocket数据的常量流,这也是我期望和希望的。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 0GZNz5bqd8dtJE05JgVuk3LboEA=
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 000000000000
我陷入困境,因为警报消息仍然弹出,说没有websocket支持。有没有办法基本上使这个页面上存在的javascript和websockets在QWebView中工作?我已经尝试过调查QNetworkAccessManager但是这个类的文档并没有让我有足够的理解来确定这是否是我启用websocket功能的方式。
如果有人对我有任何指示,我将不胜感激。感谢。