Я нашел обходной путь. Браузер WPF отключает хэш-часть URL, а браузер WinForms - нет.
Итак, посмотрите этот код за окном моего XAML, который я собираюсь использовать для получения разрешений на приложения Facebook у пользователя:
public partial class DiagnosticBrowserWindow : Window
{
public DiagnosticBrowserWindow(string urlToRequest)
{
InitializeComponent();
System.Windows.Forms.WebBrowser shadowBrowser = new System.Windows.Forms.WebBrowser();
shadowBrowser.Navigated += (sender, e) =>
{
// the access token is now
// here in e.Url
};
this.Browser.Navigated += (sender, e) =>
{
if (this.Browser.Source.AbsoluteUri.StartsWith("https://www.facebook.com/connect/login_success.html"))
{
shadowBrowser.Navigate(urlToRequest);
}
};
this.Browser.Navigate(urlToRequest);
}
}
Это работает, потому что, как только разрешения приложения были предоставлены (что мы обнаруживаем, обнаруживая перенаправление на login_success.html), мы отправляем теневой браузер (который является веб-браузером WinForms) на начальную страницу запроса, которая: 1006 *
https://www.facebook.com/dialog/oauth?&client_id={0}&response_type=token&redirect_uri=https://www.facebook.com/connect/login_success.html&display=popup&scope=publish_stream,offline_access
Facebook обнаружит, что разрешения уже предоставлены, и отправит shadowBrowser обратно на login_success.html, и на этот раз вы можете прочитать хэш-часть.