这是 MFC 和 CHtmlView,但它可能适用于所有 IE Web 控件使用。
当 Web 控件导航到某些站点上的页面时,我们会收到 HTTP / HTTPS 混合内容警告弹出窗口。
在我们的程序运行时是否可以设置任何标志、命令或 EXE 特定的注册表项来禁用警告?更好的是,我们可以选择“是”或“否”响应吗?
我们不控制网站,因此“修复网页”不是一种选择。我们的程序在客户 PC 上运行,因此“进入 IE 设置”也不是一个好的解决方案。
这是 MFC 和 CHtmlView,但它可能适用于所有 IE Web 控件使用。
当 Web 控件导航到某些站点上的页面时,我们会收到 HTTP / HTTPS 混合内容警告弹出窗口。
在我们的程序运行时是否可以设置任何标志、命令或 EXE 特定的注册表项来禁用警告?更好的是,我们可以选择“是”或“否”响应吗?
我们不控制网站,因此“修复网页”不是一种选择。我们的程序在客户 PC 上运行,因此“进入 IE 设置”也不是一个好的解决方案。
在 CHTMLView 派生类使用的控制站点类上实现自定义安全管理器,以使用成功代码处理URLACTION_HTML_MIXED_CONTENT 。控制站点是 MFC 的 ActiveX 客户端站点的实现,CHTMLView 中使用的 webbrowser 控件从中查询主机功能。
如果您使用 MFC 7.0 或更高版本,则需要通过重写的 CreateControlSite 函数替换控制站点。在 MFC 6.0 中,您只能通过使用您自己的覆盖 CreateSite 方法的 COccManager调用 AfxEnableControlContainer来全局替换控件容器。
替换控制站点后,通过控制站点类上的 BEGIN_INTERFACE_PART/END_INTERFACE_PART 宏添加 IServiceProvider 和安全管理器接口(IInternetSecurityManager,可选 IInternetSecurityManagerEx 和 IInternetSecurityManagerEx2)。如果您不熟悉 MFC 宏,请查看TN038: MFC/OLE IUnknown Implementation。你的实现应该返回 INET_E_DEFAULT_ACTION,除非方法是 ProcessUrlActionaction/ProcessUrlActionactionEx/ProcessUrlActionEx2 并且代码是 URLACTION_HTML_MIXED_CONTENT,那么你需要返回 S_OK。使用 URLPOLICY_ALLOW 填充 pPolicy 的地址以静默允许混合内容,或使用 URLPOLICY_DISALLOW 禁止。需要时使用 URLPOLICY_QUERY 询问用户。