簡體   English   中英

在IE中分叉或復制用戶瀏覽器會話

[英]Fork or copy a users browser session in IE

是否可以在Internet Explorer插件中分叉用戶會話(或執行類似操作)?

我想在用戶單擊工具欄中的按鈕時處理用戶所在的頁面。 為了避免中斷用戶瀏覽,我想“復制”所有內容,以便我可以在后台解析和處理頁面。 處理可能涉及諸如在Google搜索上加載結果鏈接的內容之類的內容,如果這是點擊按鈕的位置。

所以 - 我基本上想要的是模仿“ Ctrl+N ”但是隱藏用戶的窗口,這樣它們就不會被打斷。

如您所見,如果您在http://www.snee.com/xml/crud/posttest.html上填寫並提交表格並按“ Ctrl+N ”,則發布的所有內容仍會顯示在新窗口中,但它不會發布兩次數據。

我想以某種方式復制IWebBrowser2 ,但是:

  • 我不確定這是否可能(我無法在MSDN上找到任何信息)
  • 我不知道它是否也會復制會話。

創建IWebBrowser2的新實例並簡單地導航到當前URL不是一個有效的解決方案,因為POST變量當然不會被轉移。

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

將當前內容保存到流中。 與獲取/查看源相同。

// #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

-

邁克爾

我認為這是不可能的,因為你必須考慮這么多細節,總會有所不同。 僅舉兩點:

  • 您必須處理嵌入式Web瀏覽器(幀,IFRAME)。 我認為復制主頁只會復制其URL,以便在您將序列化主頁恢復到某處時重新加載其內容,從而更改頁面內容。 所以你必須下到框架級別。
  • 您必須注意后面的腳本嘗試連接到某個服務器以發送已分叉頁面已發送的數據。 所以你可能會改變頁面的邏輯。

因此,實時處理是用戶在看到狀態時捕獲狀態的唯一真正解決方案; 如果這是你想要實現的目標。 如果您不需要那么多細節,那么可能會更容易。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM