QWebView,多个框架/页面共享相同的会话数据
QWebView with multiple frames/pages sharing the same session data
我有一个QWebView,它加载了某个页面,用户登录并开始他的业务。这一切都很好。
我想做的是打开第二个frame/pae,它使用登录的用户会话和所有的jazz来加载一个报告页面,它将渲染到一个图像文件中,以便在一个小USB屏幕上显示。
现在,我用一个完全不同的webView来实现这一点,它无法访问受保护的页面,这有点安全风险。
以下是我所想的一些伪代码:
webView->mainFrame->loadNormalUrl
secretFrame = webView->createSecretFrame
secretFrame->useSessionOf(webView->mainFrame)
secretFrame->loadReportUrl
secretFrame->doStuffThatAlreadyWorks
任何帮助、指针、链接都会非常有用!感谢:)
好吧,
这个问题没有得到回答,所以我匆匆忙忙地查看了qtwebkit邮件列表,它们非常有用。
最重要的是对QNetworkCookieJar进行子类化,最重要的方法是从磁盘加载,您可以在构造函数中调用它。
QList<QNetworkCookie> cookies;
if (m_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QTextStream in(&m_file);
QString txt = in.readAll();
QStringList lines = txt.split("n");
foreach (QString c, lines) {
cookies.append(QNetworkCookie::parseCookies(c.toUtf8()));
}
m_file.close();
}
setAllCookies(cookies);
当然,你还需要一个书写功能,比如:
QTextStream out(&m_file);
foreach (const QByteArray &cookie, m_rawCookies)
out << cookie + "n";
m_file.close();
你的生饼干是这样的:
QList<QNetworkCookie> cookies = allCookies();
m_rawCookies.clear();
foreach (const QNetworkCookie &cookie, cookies) {
m_rawCookies.append(cookie.toRawForm());
}
如果您下载了webkit源代码,您可以查看testbrowser代码以获得更完整的示例。
解决此问题的一种方法是根本不尝试使用QWebViews,而是将QNetworkManager子类化,并挂接其信号以窥探发送回的QNetworkReply。
否则,在您的第二个QWebView中,您可以将其内容设置为您想要显示的HTML,并且您可能只能强制从缓存中获取数据。
相关文章:
- 在c代码之间共享数据的最佳方式
- DLL共享数据的推荐方式是什么
- 简单使用 std::atomic 在两个线程之间共享数据
- 跨线程共享数据集与拆分每个线程的数据
- 如何实现共享数据的复制构造函数
- 在 c++ 中,在线程之间共享数据容器的最佳方法是什么?
- PHP 中的实时仪表板,可从C++共享数据
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 在 API 和应用程序线程之间共享数据
- 加入线程后,是访问共享数据的数据竞赛吗?
- 在C 中,如何有效地在两个类之间共享数据
- 是否可以在本机C++模块之间共享数据
- 通知线程是否始终需要在修改期间锁定共享数据
- 共享数据文件映射
- 在线程之间共享数据
- 游戏中图形和物理引擎之间共享数据
- 我应该如何共享数据结构
- 如何找到Windows PC的共享数据/文件夹
- 在 Python 和 C++ 之间共享数据
- 如何将比较和交换用于任何共享数据结构的免等待互斥