QWebView с несколькими фреймами / страницами, использующими одни и те же данные сеанса - PullRequest
1 голос
/ 20 января 2012

У меня есть QWebView, и он загружает определенную страницу, пользователь входит в систему и занимается своими делами.Все это прекрасно работает.

Я хотел бы открыть второй фрейм / pae, который использует сеанс зарегистрированных пользователей и весь этот джаз для загрузки страницы отчетов, которая будет отображаться в файле изображениядля отображения на небольшом USB-экране.

Сейчас я выполняю это с помощью совершенно другого веб-представления, которое не может получить доступ к защищенным страницам, что представляет собой небольшую угрозу безопасности.

ЗдесьВот какой-то псевдокод, о котором я думаю:

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

Любая помощь, указатели, ссылки будут очень полезными!Спасибо:)

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Ну

Этот вопрос не получил и не ответил, поэтому я попал в список рассылки 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 голос
/ 25 января 2012

Один из способов решения этой проблемы - вообще не пытаться делать это с QWebView, а вместо этого создавать подкласс QNetworkManager и перехватывать его сигналы для отслеживания отправляемых обратно QNetworkReplys.

В противном случае в вашем втором QWebView вы можете просто установить его содержимое в HTML-код, который вы хотите отобразить, и вы сможете принудительно получать только данные из кэша.

...