具有多个帧/页的QWebView共享相同的会话数据

时间:2012-01-20 14:02:34

标签: c++ qt4 qtwebkit

我有一个QWebView,它加载某个页面,用户登录并开展他的业务。一切正常。

我想要做的是打开第二帧/ pae,使用登录用户会话和所有爵士加载报告页面,它将呈现给图像文件以便在小USB屏幕上显示。

现在,我使用完全不同的webView完成此操作,该视图无法访问受保护的页面,这有点安全风险。

这是我想到的一些伪代码:

webView->mainFrame->loadNormalUrl
secretFrame = webView->createSecretFrame
secretFrame->useSessionOf(webView->mainFrame)
secretFrame->loadReportUrl
secretFrame->doStuffThatAlreadyWorks

任何帮助,指针,链接都会非常有用!谢谢:))

2 个答案:

答案 0 :(得分:2)

那么,

这个问题没有收到和回答,所以我打电话到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代码以获得更完整的示例。

答案 1 :(得分:1)

你可以解决这个问题的一种方法是根本不尝试使用QWebViews,而是将QNetworkManager子类化并挂钩其信号以窥探发回的QNetworkReplys。

否则,在您的第二个QWebView中,您可以将其内容设置为您要显示的HTML,并且您可能只能强制从缓存中获取数据。