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

Detect server-side redirect within TWebBrowser control

我正在实施 OAuth 2.0 登录,它使用服务器端重定向到“http://localhost/?code=abcdef”以将必要的数据传递给客户端应用程序。 但是在这种情况下 TWebBrowser.BeforeNavigate2 事件不会被触发。

我绞尽脑汁想找到一种方法来检测 TWebBrowser 控件中的服务器端重定向(并自己处理它们)(如果可能的话)。

作为解决方法,我实施了 TWebBrowser.NavigateComplete2 事件。但是因为本地主机上没有 HTTP 服务器 运行(通常)这需要一些时间才能被触发。

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

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

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

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

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

否则,对于早期版本,您可以单独编写一个实现IDocHostUIHandler的class,然后您可以向浏览器查询其ICustomDoc interface and call its SetUIHandler()方法。