尝试在qwebview中使用带有Qt 4.8

时间:2015-07-22 20:02:47

标签: javascript qt websocket

我有一个网页,它使用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功能的方式。

如果有人对我有任何指示,我将不胜感激。感谢。

0 个答案:

没有答案