是否可以在Internet Explorer插件中分叉用户会话(或执行类似操作)?
我想在用户单击工具栏中的按钮时处理用户所在的页面。为了避免中断用户浏览,我想“复制”所有内容,以便我可以在后台解析和处理页面。处理可能涉及诸如在Google搜索上加载结果链接的内容之类的内容,如果这是点击按钮的位置。
所以 - 我基本上想要的是模仿“Ctrl+N
”,但是隐藏用户的窗口,这样它们就不会被打断。
如您所见,如果您在http://www.snee.com/xml/crud/posttest.html上填写并提交表单并按“Ctrl+N
”,则发布的所有内容仍会显示在新窗口中,但不会发布数据两次。
我想以某种方式复制IWebBrowser2
,但是:
创建IWebBrowser2
的新实例并且只是导航到当前网址不是POST
的有效解决方案 - 当然变量不会被转移。
答案 0 :(得分:1)
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
-
迈克尔
答案 1 :(得分:0)
有趣的想法。你可以复制DOM holus-bolus,然后用副本替换一个新窗口的DOM。这只是猜测。在这一点上,我和你一样黑暗。
答案 2 :(得分:0)
我认为这是不可能的,因为你必须考虑很多细节,总会有所不同。仅举两个:
因此,实时处理是用户看到它时捕获状态的唯一真正解决方案;如果这是你想要实现的目标。如果你不需要那么多细节,可能会更容易。