【发布时间】:2011-06-27 04:08:51
【问题描述】:
您好,感谢您的关注。
问题描述:
我已经实现了一个嵌入了浏览器控件的 c# WinForm 应用程序,并实现了 IInternetSecurityManager 来执行我们需要的任务,以便允许在 iframe 中使用我们本地安装的网页进行跨域访问。
使用 IInternetSecurityManager、IOleClientSite、IDocHostShowUI 和 IDocHostUIHandler,一切都按预期工作。换句话说,我们的所有实现都被浏览器控件调用。
问题是当浏览器控件中加载的网页具有调用 window.showModalDialog() 的脚本时:正在使用的浏览器控件实例不再与我们的客户端站点通信。在上述任何接口中绝对不会调用任何 QueryInterface 调用或任何其他方法。
我假设对话框中的文档没有使用我们的安全管理器实现,因为 IE 显示的对话框中的 Web 浏览器控件与我们调用 SetClientSite() 的控件不同。
问题:
我们如何与这个新的浏览器控件对话?我们需要能够在 IE(我们的 IInternetSecurityManager 实现)显示的对话框中赋予浏览器控制权。但是,我们从来没有机会告诉它我们的客户网站来进行连接,可以这么说。换句话说,没有来自 IE 的通信通过一个界面告诉我们,“我是一个由 IE 创建的新浏览器控件,这是我的 IUnknown 界面。这是您设置我的客户端站点等的机会。”如果 IE 有这样的通知,我们会很高兴。
结果是使用了两个不同的安全上下文,并且每当我们在使用 iframe 的对话框中时,我们的应用程序都会失败,因为我们的 IInternetSecurityManager 实现未在使用中。
示例源代码:
我已经对源代码进行了精心设计以保护无辜者 :) 并简化为我认为您可以在其自己的 Visual Studio 2010 解决方案中使用的东西。
请阅读 ReadMe.txt 文件以获取有关问题、重现步骤等的信息。
我编写的测试网页显示了指导您使用示例的信息和步骤。
如果您对我要完成的工作有任何疑问或示例不够清晰,请告诉我。
请指教。谢谢。
【问题讨论】:
标签: c# .net iframe dialog webbrowser-control