是否可以在Internet Explorer插件中派生用户会话(或执行类似操作)?
当用户单击工具栏中的按钮时,我想处理用户所在的页面。为了避免打扰用户浏览,我想";复制";这样我就可以在后台解析和处理页面了。处理过程可能包括在谷歌搜索中加载结果链接的内容,如果点击按钮的话。
所以,我基本上想要的是模仿Ctrl+N,但对用户隐藏窗口,这样他们就不会被打断。
正如你所看到的,如果你在http://www.snee.com/xml/crud/posttest.html并按Ctrl+N,发布的所有内容仍将显示在新窗口中,但不会发布两次数据。
我想以某种方式复制IWebBrowser2
,但是:
- 我不确定这是否可能(我在MSDN上找不到任何信息)
- 我不知道它是否也复制了会话
创建一个新的IWebBrowser2
实例并简单地导航到当前URL并不是一个有效的解决方案,因为POST
变量当然不会被遗留下来。
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,(无效**)&pPersistStreamInit);if(成功(小时)){hr=pPersistStreamIni->Save(,True);pPersistStreamInit->Release();}pHtmlDoc->Release();}
您提供浏览器和流。HTH-
--
Michael
有趣的想法。您可以复制DOM holus bolus,然后用该副本替换新窗口的DOM吗。这只是一个猜测。在这一点上,我和你一样蒙在鼓里。
我认为这是不可能的,因为你必须考虑太多细节,有些东西总是会坏掉的。仅举两个例子:
- 您必须注意嵌入式web浏览器(框架、IFRAME)。我认为复制主页只会复制他们的URL,这样当你在某个地方恢复序列化的主页时,他们的内容就会被重新加载,因此页面的内容会发生变化。因此,您必须转到框架级别
- 您必须注意那些在背后试图连接到某个服务器以发送已由您分叉的页面发送的数据的脚本。因此,您可以更改页面的逻辑
因此,实时处理是捕捉用户所看到的状态的唯一真正解决方案;如果这是你想要实现的。如果你不需要那么多细节,这可能会更容易做到。