【问题标题】:Fork or copy a users browser session in IE在 IE 中分叉或复制用户浏览器会话
【发布时间】:2010-09-20 20:21:22
【问题描述】:

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

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

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

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

我想以某种方式复制IWebBrowser2,但是:

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

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

【问题讨论】:

    标签: c++ internet-explorer com toolbar iwebbrowser2


    【解决方案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

    --

    迈克尔

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2020-01-20
          • 1970-01-01
          • 2011-10-11
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多