2

我绝对需要用户退出她/他用来访问我们数据库的网站。如果一个人没有注销,只是关闭了浏览器,系统会将用户名锁定一个小时。我没有实现它,它就是它的工作方式。

我想写一个简单的 C# 程序,以某种方式检测用户是否注销,如果没有,阻止他们关闭浏览器。

1) 是否有 Firefox API 或任何其他方式来读取 firefox.exe 进程中的网站内容?

2) 当用户点击“X”关闭浏览器时,是否可以中止 firefox.exe 进程的终止?(可能这是破坏交易的问题)。

我会很感激任何提示。谢谢!

4

5 回答 5

10

如果您使用身份验证,每个用户都应该有一个会话。会话可以配置为过期。您需要做的只是处理一个适当的会话过期事件

不要寻找任何黑客来处理浏览器退出事件 - 这是一条危险的道路:

  • 每个人都会讨厌它,而且你不可能让它可靠,即在较新版本的浏览器中工作,支持不同操作系统上的许多浏览器等
  • 这可能适用于 Firefox Mozilla(示例),但可能不适用于 IE 或 Chrome
  • 应用程序可以被操作系统杀死,因此浏览器事件不会有机会触发并且您的处理代码将不起作用
于 2012-07-23T15:00:02.027 回答
2

您不能阻止用户关闭 firefox,因为有很多方法可以关闭它,而这些方法无法由您的代码控制(例如,从 taskmon 中终止进程)。但是,您可以在代码中检测到关闭事件(window.onClose() 事件)并执行注销过程。

但是,如果 firefox(或任何其他浏览器)被杀死而不是被关闭,window.onClose() 将不起作用。因此,最好在服务器中处理会话,而不是依赖于客户端行为。

于 2012-07-23T15:03:25.943 回答
2

您可以做的是使用 javascript 来检测浏览器关闭或离开您的网站,并在这些情况下触发一个方法或点击一个将它们注销的 Web 服务。非常快速,非常简单,并且可以跨浏览器工作。

于 2012-07-23T15:08:20.423 回答
1

您无法阻止用户使用合法方法关闭程序。这是出于明显的安全目的。

于 2012-07-23T14:57:57.853 回答
0

我同意 oleksii。但是您可以让用户更不容易关闭 Firefox。

我目前正在编写一个附加组件(通过 SDK),它侦听“quit-application-requested”观察者通知并将 aSubject.data 设置为 true 以防止 Firefox 退出应用程序。

observe: function(aSubject, aTopic, aData) {
    if (aTopic == "quit-application-requested") {
      aSubject.QueryInterface(Ci.nsISupportsPRBool);
      aSubject.data = (this.canQuit() == false);
    }
  }

但我真正想要的是不关闭某个窗口,因为不关闭 Web 应用程序(FileMaker 数据库)。

因此,我还尝试禁用所有命令、所有键和所有菜单(浏览器 XUL),如下所示:

var allCommands = win.document.getElementsByTagName("command");
for (let i = 0; i < allCommands.length; i++) {
  allCommands[i].setAttribute("disabled", "true");
}

var allKeys = win.document.getElementsByTagName("key");
for (let i = 0; i < allKeys.length; i++) {
  allKeys[i].setAttribute("disabled", "true");
}

var allMenus = win.document.getElementsByTagName("menu");
for (let i = 0; i < allMenus.length; i++) {
  allMenus[i].setAttribute("disabled", "true");
}

但是除非我阻止打开新的 Firefox 窗口,否则用户仍然可以退出应用程序并因此关闭带有 Web 应用程序的窗口。

所以“它”有效,但我希望他们仍然浏览并且不关闭该选项卡所在的特定选项卡或窗口。

在不阻止打开新窗口的情况下,它不起作用,因为显然当用户打开一个新窗口然后当用户按下 Alt+F4 时,它不会是应用程序退出而是窗口关闭。尽管我认为我已经禁用了所有命令/键/菜单,但仍然存在某种接近的可能性。

有没有人对如何在不阻止打开新窗口的情况下实现这一点有任何想法?

于 2014-07-06T03:50:52.747 回答