在TWebBrowser控件中检测服务器端重定向

时间:2018-08-07 08:47:31

标签: delphi url-redirection http-redirect twebbrowser

我正在实现OAuth 2.0登录名,该登录名使用服务器端重定向到'http://localhost/?code=abcdef'来将必要的数据传递到客户端应用程序。 但是在这种情况下,不会触发F_COMPONENT_IDS事件。

我已经全力以赴,试图找到一种方法来检测TWebBrowser控件(如果可能的话)中的服务器端重定向(并自己处理)。

作为一种解决方法,我已经实现了PDF_MSDS事件。但是,因为(通常)在本地主机上没有运行HTTP服务器,这需要花费一些时间才能被触发。

我想在网络浏览器尝试导航到重定向并自己解析URL数据并跳过导航至本地主机之前检测重定向。

1 个答案:

答案 0 :(得分:2)

默认情况下,TWebBrowser不会触发重定向事件。在重定向之前为初始URL触发OnBeforeNavigate2,然后在重定向之后触发OnNavigateComplete。您可以比较两个事件提供的URL,以了解是否发生了重定向。

但是,如果启用浏览器的DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION标志,则将获得一个OnBeforeNavigate2事件以进行重定向,并且可以根据需要取消重定向。

要启用该标志,您需要实现IDocHostUIHandler.GetHostInfo()接口方法。

如果您使用的是10.0 Seattle或更高版本,则TWebBrowser已经为您实现了IDocHostUIHandler,因此只需从TWebBrowser派生并根据需要覆盖GetHostInfo()

否则,对于早期版本,您可以编写一个实现IDocHostUIHandler的单独类,然后可以在浏览器中查询其ICustomDoc接口并调用其SetUIHandler()方法。

相关问题