繁体   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