【发布时间】:2011-05-19 15:19:55
【问题描述】:
我试图在 Qt 的 QWebView 中拦截页面/表单请求,并在某些情况下使用替代内容进行响应。
QNetworkReply* ngcBrowser::createRequest(Operation operation, const QNetworkRequest& request, QIODevice* ioDevice)
{
view->page()->setNetworkAccessManager(this);
QNetworkReply* response = NULL;
if (request.url().path().endsWith("ajax"))
{
response = QNetworkAccessManager::createRequest(operation, request, ioDevice);
response->write("{ success: true }");
}
else
{
response = QNetworkAccessManager::createRequest(operation, request, ioDevice);
}
return response;
}
正如您在上面看到的,我已经重写了 QNAM createRequest 方法来接收所有页面请求并在 Url 以 .ajax 扩展名结尾时使用 JSON 对象进行响应。但是我发现很难将数据写回网络流中。
关于如何进行此操作的任何提示或提示?
干杯, 本
更新:
嗨阿比吉斯, 我尝试了您的解决方案,但无法将信号连接到插槽。
QNetworkAccessManager* nam = view->page()->networkAccessManager();
bool status = QObject::connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyReceived(QNetworkReply*)));
if(!status)
{
QErrorMessage errorMessage;
errorMessage.showMessage("connect failed");
errorMessage.exec();
}
错误:
Object::connect: No such slot ngcBrowser::replyRecieved(QNetworkReply*)
更新:
好的,我已经设法让他工作,但是当我尝试写入 IODevice 时失败,表明它是只读设备。
感谢大家的帮助。
【问题讨论】:
-
所以如果一个 url 以 .ajax 结尾,你只是想发送 JSON 作为回复而不是别的吗?还是要将 JSON 附加到 http 响应?
-
我希望将 JSON 附加到 http 响应中。感谢您的宝贵时间。