Delphi TWebBrowser:禁用所有安全限制
我正在使用Delphi10.2中的TWebBrowser组件,它是从SHDocVW_TLB类型库导入的 我想使用此web浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,无法从本地文件(更准确地说:我使用自定义HTML内容加载到浏览器组件中)向LAN或WAN调用AJAX 我的目标是禁用此web浏览器控件的所有安全限制(我知道风险) 不确定是否还有其他方法,但我想我必须创建一个自定义IInternetSecurityManager。在我的研究中,我发现了,它解释了如何编写这样一个安全管理器。 但是在任何地方我都找不到如何将这个定制的IInternetSecurityManager“插入/覆盖”到TWebBrowser控件中 我需要做什么才能完全禁用所有安全限制? 谢谢你的提示 答案与您在问题中链接的答案相同: 承载WebBrowser控件或MSHTML的应用程序 或MSHTML主机可以创建一个安全管理器(通过实现该接口),用于处理对主机重要的URL操作和策略。其他URL操作和策略将传递给默认安全管理器,以便它能够适当地处理它们。该接口将用于处理来自组件的与Windows相关的信息,以便定制的安全管理器可以处理它所需的任何用户界面 要创建自定义安全管理器,组件必须实现接口。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回 安全警告:错误地实现方法可能会损害应用程序的安全性。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回。如果某个方法未覆盖默认行为并返回指示成功的HRESULT,则该操作将不被处理,并可能使用户面临权限提升攻击的风险。在继续之前,您应该先复习 组件还必须实现一个对象,该对象在嵌入或MSHTML时支持接口。 URL操作将执行以下步骤Delphi TWebBrowser:禁用所有安全限制,delphi,webbrowser-control,twebbrowser,Delphi,Webbrowser Control,Twebbrowser,我正在使用Delphi10.2中的TWebBrowser组件,它是从SHDocVW_TLB类型库导入的 我想使用此web浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,无法从本地文件(更准确地说:我使用自定义HTML内容加载到浏览器组件中)向LAN或WAN调用AJAX 我的目标是禁用此web浏览器控件的所有安全限制(我知道风险) 不确定是否还有其他方法,但我想我必须创建一个自定义IInternetSecurityManager。在我的研究中,我发现了,它解释了如何编写这样一个安
QueryInterface
方法以获取IServiceProvider
接口IInternetSecurityManager
实现的指针传递给IInternetSecurityManager
接口的类
其次,幸运的是,TOleControl
(TWebBrowser的源代码)至少从Delphi 2006开始就实现了IOleClientSite
和IServiceProvider
接口,所以您所需要做的就是为其公共事件分配一个处理程序,并且当MSHTML调用IServiceProvider.QueryService()时
查找IInternetSecurityManager
,可以返回自定义安全管理器类的实例
对于较旧的Delphi版本,您可以通过查询接口的DefaultInterface
属性,手动向TWebBrowser
提供一个IOleClientSite
对象,然后调用该方法。下面的文章中演示了一个示例:
为TWebBrowser
提供自定义IOleClientSite
也是向MSHTML提供自定义、和对象的方式(MSHTML不会使用IServiceProvider
查询它们,因此它们不会触发TWebBrowser.ServiceQuery
事件)。这些接口是大多数选项的基础,如MSDN所述:
当容器提供对ActiveX控件的支持时,定制机制被设计为自动化每当实例化WebBrowser控件时,它都会尝试从主机中查找IDocHostUIHandler
、IDocHostUIHandler2
和IDocHostShowUI
实现(如果可用)。WebBrowser控件通过在主机界面上调用来实现这一点
对于实现接口并通过浏览器方法传递指向的IOleClientSite
指针的应用程序,此体系结构会自动工作
答案与您在问题中链接的答案相同:
承载WebBrowser控件或MSHTML的应用程序
或MSHTML主机可以创建一个安全管理器(通过实现该接口),用于处理对主机重要的URL操作和策略。其他URL操作和策略将传递给默认安全管理器,以便它能够适当地处理它们。该接口将用于处理来自组件的与Windows相关的信息,以便定制的安全管理器可以处理它所需的任何用户界面
要创建自定义安全管理器,组件必须实现接口。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回
安全警告: