2008-11-05 90 views
3

是否可以在Internet Explorer插件中分叉用戶會話(或執行類似操作)?在IE中插入或複製用戶瀏覽器會話

我想要處理用戶點擊工具欄中的按鈕時所處的頁面。爲了避免中斷用戶瀏覽,我想「複製」所有內容,以便我可以在後臺解析和處理頁面。處理可能涉及諸如在Google搜索中加載結果鏈接的內容(如果該按鈕被點擊的地方)。

所以 - 我基本想要的是模仿「Ctrl+N」,但隱藏窗口從用戶,所以他們不會被打斷。你可以看到,如果你填寫並提交表格http://www.snee.com/xml/crud/posttest.html,然後按「Ctrl+N」,發佈的所有內容仍將出現在新窗口中,但它不會發布數據兩次。

我在想以某種方式複製IWebBrowser2,但:

  • 我不知道這是可能的(我一直沒能找到MSDN上的任何信息)
  • 我不知道它是否也複製了會話。

創建IWebBrowser2的一個新的實例,只是導航到當前的URL不是一個有效的解決方案,當然POST - 變量沒有得到延續。

回答

0

有趣的想法。你可以複製DOM holus-bolus,然後用副本替換一個新窗口的DOM。這只是一個猜測。在這一點上,我和你一樣黑暗。

1

一個BHO或插件會工作。 有很多選擇來源,這是有點。選擇你的平衡點。 查找IDocHostUIHandler以更改行爲。 IHTMLElementCollection在瀏覽器中解析頁面。 我現在能想到的最簡單的事情是......

將當前內容保存到流中。與get/view源相同。

 
// #include 
HRESULT SaveDocumenttoStream(IWebBrowser* pWebBrowser, 
          IStream* pStream) 
{ 
HRESULT hr; 
IDispatch* pHtmlDoc = NULL; 
IPersistStreamInit* pPersistStreamInit = NULL; 
hr = pWebBrowser->get_Document(&pHtmlDoc); 
if (SUCCEEDED(hr) && pHtmlDoc) 
{ 
    // Query for IPersistStreamInit. 
    hr = pHtmlDoc->QueryInterface(IID_IPersistStreamInit, 
           (void**)&pPersistStreamInit); 
    if (SUCCEEDED(hr)) 
    { 
    hr = pPersistStreamIni->Save(, True); 
    pPersistStreamInit->Release(); 
    } 
    pHtmlDoc->Release(); 
} 

您提供一個瀏覽器和stream.HTH

-

邁克爾

0

我認爲這是不可能做到的,因爲你必須考慮很多細節的東西將永遠打破。只要提到兩個:

  • 你必須照顧嵌入式網頁瀏覽器(幀,IFRAME)。我認爲複製主頁面會複製它們的URL,這樣當你將序列化的主頁面還原到某個地方時,它們的內容將被重新加載,從而頁面內容發生變化。所以你必須下到幀級。
  • 您必須注意腳後背的腳本嘗試連接到某個服務器以發送已由您分叉的頁面發送的數據。所以你可能會改變頁面的邏輯。

因此,處理生活是捕捉用戶看到它的唯一真實解決方案;如果這是你想實現的。如果你不需要太多的細節,可能會更容易。