我正在编写桌面应用程序,并且在一部分中我将介绍OAuth 2.0流程。如何在外部网页浏览器中关闭标签页?
的步骤是:
- 启动过程 - 打开网页浏览器登录页面。
- 用户登录并授权我的应用程序。
- 在后台我搜索具有特定名称的进程,将其保存(名称)在应用程序中。
- 最后,我关闭了Web浏览器。
问题是,如果用户以前在网络浏览器中打开过一些标签 - 在第1点中,新标签被添加并且在第4点中,所有内容都被关闭(带有所有标签的网络浏览器)。
你能告诉我是否有方法可以关闭浏览器中的单个标签页吗? 或者也许有其他/更简单的方法来通过OAuth?
作为手动解决方案,我将简单地向用户显示信息“现在您可以关闭此选项卡”,但是我想自动执行此操作。
这是C#.Net 4.0 WPF项目。
string strAuthUrl = "http://accounts.example.com/login",
strAuthCode = string.Empty;
// Request authorization from the user (by opening a browser window):
ProcessStartInfo startInfo = new ProcessStartInfo(strAuthUrl);
startInfo.CreateNoWindow = false;
//1.
Process.Start(startInfo);
//2. - is happening in web browser
//3.
do
{
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.StartsWith("Success code="))
{
strAuthCode = proc.MainWindowTitle.ToString().Substring(13, 30);
//4.
try
{
// Close process by sending a close message to its main window.
proc.CloseMainWindow();
// Free resources associated with process.
proc.Close();
// Wait 500 milisecs for exit
proc.WaitForExit(500);
//if proc has not exited so far - kill it
if (proc.HasExited == false)
{
proc.Kill();
proc.WaitForExit();
}
}
catch (Exception ex)
{
//Do something with exception
}
break;
}
}
}
while (string.IsNullOrEmpty(strAuthCode));
感谢您的建议。
+1实现验证我的最奇特的方式有史以来 – 2012-03-14 13:54:25
更多关于主题:你可能会考虑使用现有的C#OAuth库之一,而不是这个浏览器的东西 - 例如,从http://stackoverflow.com/questions/3997172/oauth-2-0的答案之一-service-provider-net-libraries – 2012-03-14 13:56:55
您可以通过使用本地'WebBrowser'控件将它保留在您的应用程序中。 – 2012-03-14 13:56:56