我有一个 QWebView,它会加载某个页面,用户登录并处理他的业务。这一切都很好。
我想做的是打开第二个框架/pae,它使用登录的用户 session 和所有爵士乐来加载报告页面,它将呈现为图像文件以显示在一个小 USB 屏幕上。
现在,我使用完全不同的 webView 来完成此操作,它无法访问 protected 页面,这存在一点安全风险。
下面是我所想的一些伪代码:
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();
你的原始 cookies 是这样的:
QList<QNetworkCookie> cookies = allCookies();
m_rawCookies.clear();
foreach (const QNetworkCookie &cookie, cookies) {
m_rawCookies.append(cookie.toRawForm());
}
如果您下载了 webkit 源代码,您可以查看 testbrowser 代码以获得更完整的示例。
关于c++ - 具有多个框架/页面的 QWebView 共享相同的 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942531/