QWebView,多个框架/页面共享相同的会话数据

QWebView with multiple frames/pages sharing the same session data

本文关键字:共享 数据 会话 框架 QWebView      更新时间:2023-10-16

我有一个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,并且您可能只能强制从缓存中获取数据。