3

是否可以在 Internet Explorer 插件中分叉用户会话(或执行类似操作)?

我想处理用户单击工具栏中的按钮时所在的页面。为避免中断用户浏览,我想“复制”所有内容,以便在后台解析和处理页面。该处理可能涉及诸如在 Google 搜索中加载结果链接的内容(如果这是单击按钮的位置)。

所以 - 我基本上想要的是模仿Ctrl+N但对用户隐藏窗口,这样他们就不会被打断。

如您所见,如果您在http://www.snee.com/xml/crud/posttest.html上填写并提交表单并按Ctrl+ N,发布的所有内容仍会出现在新窗口中,但不会两次发布数据。

我正在考虑以某种方式复制IWebBrowser2,但是:

  • 我不确定这是否可能(我无法在 MSDN 上找到任何信息)
  • 我不知道它是否也复制了会话。

创建一个新的实例IWebBrowser2并简单地导航到当前 URL 不是一个有效的解决方案,因为POST-variables 当然不会被继承。

4

3 回答 3

1

BHO 或插件可以工作。有很多选择可以获取源代码,这有点。选择你的姿态。查找 IDocHostUIHandler 以更改行为。IHTMLElementCollection 在浏览器中解析页面。目前我能想到的最简单的事情是......

将当前内容保存到流中。与获取/查看源代码相同。

// #包括
HRESULT SaveDocumenttoStream(IWebBrowser* pWebBrowser,
                             IStream* pStream)
{
HRESULT 小时;
IDispatch* pHtmlDoc = NULL;
IPersistStreamInit* pPersistStreamInit = NULL;
hr = pWebBrowser->get_Document( &pHtmlDoc );
如果(成功(小时)&& pHtmlDoc)
{
  // 查询 IPersistStreamInit。
  hr = pHtmlDoc->QueryInterface(IID_IPersistStreamInit,
                               (void**)&pPersistStreamInit );
  如果(成功(小时))
  {
     hr = pPersistStreamIni->Save(, True);
     pPersistStreamInit->Release();
  }
  pHtmlDoc->Release();
}

您提供浏览器和 stream.HTH

--

迈克尔

于 2009-01-27T18:06:57.587 回答
0

有趣的想法。您能否复制 DOM holus-bolus,然后用副本替换新窗口的 DOM。这只是一个猜测。在这一点上,我和你一样在黑暗中。

于 2008-11-13T14:30:56.540 回答
0

我认为这是不可能的,因为你必须考虑这么多细节,总会有一些事情发生。只说两个:

  • 您必须注意嵌入式 Web 浏览器(框架、IFRAME)。我认为复制主页只会复制他们的 URL,因此当您在某处恢复序列化的主页时,他们的内容将被重新加载,因此您的页面内容会发生变化。因此,您将不得不下降到帧级别。
  • 您必须注意那些在您背后尝试连接到某个服务器以发送您分叉的页面已经发送的数据的脚本。所以你可能会改变页面的逻辑。

因此,实时处理是捕获用户看到的状态的唯一真正解决方案;如果这是您想要实现的目标。如果你不需要这么多细节,它可能更容易做到。

于 2010-03-29T19:48:49.150 回答