你好,感谢您的期待。自定义IInternetSecurityManager没有与对话框调用
问题描述:
我已经实现了嵌入式浏览器控件C#WinForm应用程序,并实施IInternetSecurityManager,以便让与我们的本地安装的网络I帧的跨域访问执行我们所需要的任务页面。
所有的东西都像IInternetSecurityManager,IOleClientSite,IDocHostShowUI和IDocHostUIHandler一样按预期工作。换句话说,我们被浏览器控件调用了所有的实现。
问题是,当浏览器控件中加载的网页具有调用window.showModalDialog()的脚本时:正在使用的浏览器控件实例不再与我们的客户端站点通信。绝对没有QueryInterface调用或任何其他方法在上述任何接口中调用。
对话框中的文档没有使用我的安全管理器实现我假设,因为IE显示的对话框中的Web浏览器控件与我们称为SetClientSite()的对话框不同。
问:
我们如何谈论这个新的浏览器控制?我们需要能够在IE浏览器显示的对话框中提供浏览器控件,我们的IInternetSecurityManager实现。但是,我们从来没有机会告诉它关于我们的客户端网站,可以这么说。换句话说,IE没有通过一个接口告诉我们的信息:“我是由IE创建的新浏览器控件,这里是我的IUnknown接口,这是您设置客户端网站的机会等等。”如果有来自IE的这样的通知,我们将是黄金。
结果是两个不同的安全上下文正在使用,我们的应用程序在任何时候都失败,因为我们在使用iframe的对话框中,因为我们的IInternetSecurityManager实现未被使用。
示例源代码:
我已经离开凿刻在源代码保护无辜者:),并已减少到东西,我觉得你可以在自己的Visual Studio 2010解决方案一起工作。
请阅读有关问题的资料,再现步骤等
测试网页,我写了显示信息和步骤,指导您通过使用样本的readme.txt文件。
如果您对我正在尝试完成的内容有疑问,或者样本不够清晰,请告诉我。
请指教。谢谢。
http://home.comcast.net/~lowrider2112/bin/TestIEHost.rar