2012-01-20 51 views
1

我有一個QWebView,它加載了某個頁面,用戶登錄並執行他的業務。這一切工作正常。QWebView與多個幀/頁共享相同的會話數據

我想要做的是打開第二幀/ pae,它使用已登錄的用戶會話和所有爵士加載報告頁面,它將呈現給圖像文件以便在一個小USB屏幕上顯示。

現在,我用完全不同的webView完成了這個任務,它無法訪問受保護的頁面,這有點危險。

下面是我在想什麼的一些僞代碼:

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

任何幫助,指針,鏈接,就會顯得非常有幫助!謝謝:)

回答

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

你可以這樣做的一種方式是不要試圖用QWebViews來完成它,而是繼承QNetworkManager並掛鉤它的信號來窺探發回的QNetworkReplys。

否則,在您的第二個QWebView中,您可以將其內容設置爲您要顯示的HTML,並且您可能只能強制從緩存中抓取數據。

+0

事實證明,我通過繼承QNetworkCookieJar並實現我自己的文件系統存儲來實現此目標。示例代碼在測試瀏覽器的qwebkit源代碼中找到。以上是一個好主意,但。我不確定我是否應該在此發佈答案......我不想總是回答我自己的問題...... –