【问题标题】:Detect server-side redirect within TWebBrowser control在 TWebBrowser 控件中检测服务器端重定向
【发布时间】:2018-08-07 08:47:31
【问题描述】:

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

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

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

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

【问题讨论】:

标签: delphi url-redirection http-redirect twebbrowser


【解决方案1】:

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

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

开启flag需要实现IDocHostUIHandler.GetHostInfo()接口方法。

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

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

【讨论】:

  • 实现IDocHostUIHandler 接口成功了-谢谢。 DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION 的值为 $04000000
  • 这个问题也在这里问和回答了:stackoverflow.com/questions/42637939/…(但是我没找到……)
猜你喜欢
  • 2012-03-29
  • 2012-04-24
  • 2017-05-14
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多