在 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()
方法。
我正在实施 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()
方法。