【问题标题】:Custom IInternetSecurityManager not being called with dialogs自定义 IInternetSecurityManager 未通过对话框调用
【发布时间】: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 文件以获取有关问题、重现步骤等的信息。

我编写的测试网页显示了指导您使用示例的信息和步骤。

如果您对我要完成的工作有任何疑问或示例不够清晰,请告诉我。

请指教。谢谢。

http://home.comcast.net/~lowrider2112/bin/TestIEHost.rar

【问题讨论】:

    标签: c# .net iframe dialog webbrowser-control


    【解决方案1】:

    一种选择是创建您自己的对话框表单(在 C# 中),上面带有另一个自定义安全 WebBrowser 控件。然后您可以从 Javascript 调用 C# 来打开表单,而不是使用 showModalDialog。

    【讨论】:

      【解决方案2】:

      您可以覆盖网络浏览器的控制方法CreateWebBrowserSiteBase

      protected override WebBrowserSiteBase CreateWebBrowserSiteBase()
      {
          return new ExtendedWebBrowserSite(this);
      } 
      

      并像这样实现ExtendedWebBrowserSite

      class ExtendedWebBrowserSite : WebBrowser.WebBrowserSite,
          IDocHostShowUI,
          IfacesEnumsStructsClasses.IServiceProvider,
          IInternetSecurityManager
          ...
      

      那可以调用类IInternetSecurityManager

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        相关资源
        最近更新 更多