我有一个嵌入 WebBrowser
的本机Windows应用程序,即
-
CLSID_WebBrowser
-
8856F961-340A-11D0-A96B-00C04FD705A2
-
Shell.Explorer.2
不幸的是,在Windows服务器上运行时, Internet Explorer Enhanced Security 模式会干扰 WebBrowser 控件,导致它根本无法渲染:
在这种情况下,软件的UI作为 WebBrowser 控件驱动 - 使软件无法使用 .
我可以disable Internet Explorer Enhanced Security mode,但那不切实际 .
如何指示Internet Explorer浏览器允许嵌入式浏览器在没有安全对话框的情况下进行渲染?
Note: 我本来建议将 about:security_Application.exe
添加到 Trusted Zones 列表中“
遗憾的是,这将需要DRP / FRP验证,ISO安全评估,并且必须调用安全组来进行更改 . 此外,还需要创建一个RFC,以便毕马威不会进行下一次审计 . 我希望得到"good"解决方案 .
2 回答
您可以指定其他URL . 例如,您可以将内容提取到临时文件并导航到该文件 . 这不会将您的内容放在受信任的区域中,但它比您为about协议获得的Internet区域更好 .
如果您不想保存内容,可以先导航到about:blank,然后在DocumentComplete中,QI文档为IPersistMoniker,并使用基本模拟url名字对象的TInterfacedObject调用Load .
IMoniker.GetDisplayName实现需要返回URL . 网址必须位于受信任区域 .
IMoniker.BindToStorage实现需要在询问IStream时发回对TMemoryStream的引用 .
还有第三种方法,写一个process-wide security manager,将你的网址放在一个受信任的区域 .
解决方案是实现您自己的Internet Security Manager服务,创建一个实现IInternetSecurityManager的对象(请参阅MSDN: Implementing a Custom Security Manager) . 有五个安全区域:
当地:
URLZONE_LOCAL_MACHINE
(0)内联网:
URLZONE_INTRANET
(1)可信任:
URLZONE_TRUSTED
(2)互联网:
URLZONE_INTERNET
(3)受限制:
URLZONE_UNTRUSTED
(4)您真正需要担心的唯一方法是MapUrlToZone:
此方法检查Url是否以about:security开头
如果是,则返回该区域应为 Local :
每隔一个方法 must 返回
INET_E_DEFAULT_ACTION
(即不是S_OK也不是E_NOTIMPL),例如:您在调用IServiceProvider.QueryService时为嵌入式WebBrowser提供此服务 . 对于Delphi的TEmbeddedWB控件,它在
OnQueryService
事件中公开:也许你可以考虑加载一个不同的嵌入式浏览器 . 有:
WebKit:http://www.webkit.org/
SWT(日食)