我正在实现OAuth 2.0登录名,该登录名使用服务器端重定向到'http://localhost/?code=abcdef'来将必要的数据传递到客户端应用程序。
但是在这种情况下,不会触发F_COMPONENT_IDS
事件。
我已经全力以赴,试图找到一种方法来检测TWebBrowser控件(如果可能的话)中的服务器端重定向(并自己处理)。
作为一种解决方法,我已经实现了PDF_MSDS
事件。但是,因为(通常)在本地主机上没有运行HTTP服务器,这需要花费一些时间才能被触发。
我想在网络浏览器尝试导航到重定向并自己解析URL数据并跳过导航至本地主机之前检测重定向。
答案 0 :(得分:2)
默认情况下,TWebBrowser
不会触发重定向事件。在重定向之前为初始URL触发OnBeforeNavigate2
,然后在重定向之后触发OnNavigateComplete
。您可以比较两个事件提供的URL,以了解是否发生了重定向。
但是,如果启用浏览器的DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION
标志,则将获得一个OnBeforeNavigate2
事件以进行重定向,并且可以根据需要取消重定向。
要启用该标志,您需要实现IDocHostUIHandler.GetHostInfo()
接口方法。
如果您使用的是10.0 Seattle或更高版本,则TWebBrowser
已经为您实现了IDocHostUIHandler
,因此只需从TWebBrowser
派生并根据需要覆盖GetHostInfo()
。
否则,对于早期版本,您可以编写一个实现IDocHostUIHandler
的单独类,然后可以在浏览器中查询其ICustomDoc
接口并调用其SetUIHandler()
方法。