书签,以防止在网站上自动注销
Bookmarklet to prevent auto-logout on website
我正在使用一个Web应用程序,该应用程序在一定数量的不活动后自动将您注销。我无法控制该应用程序。应用程序用于注销的相关代码如下:
var windoc = window.document;
var timeoutID;
function AlertUser() {
var msg = 'Session expires in 90 seconds. Continue with this session?';
var preConfirmTime = new Date();
if (confirm(msg)) {
var postConfirmTime = new Date();
if (postConfirmTime.getTime() - preConfirmTime.getTime() > 90000) {
alert('Sorry, your session has already expired.');
window.location = '/Logout.aspx';
} else {
var img = new Image(1,1);
img.src = '/Reconnect.aspx';
timeoutID = window.setTimeout('AlertUser()','3510000');
}
} else {
window.location = '/Logout.aspx';
}
}
function ResetTimeout(delay) {
window.clearTimeout(timeoutID);
timeoutID = window.setTimeout('AlertUser()', delay);
}
timeoutID = window.setTimeout('AlertUser()','3510000');
由于注销确实破坏了我的工作流程,因此我希望有一个书签,以便在会话即将过期时确认OK
。我想我可能会使用
javascript:window.confirm = function(){return true;};
但这仅在我单击书签时运行。有没有办法让它自动在活动(IE 10)浏览器选项卡中运行(如果我使用应用程序打开一个新选项卡也是如此)并使其持续检查?顺便说一句,我无法安装任何浏览器扩展程序。与网页交互的唯一方法是通过书签。
如果您可以在本地安装其他程序,请使用Charles Proxy之类的程序(使用其"重写"工具)在应用程序交付到浏览器时对其进行更改。只要 Charles 处于打开状态,就可以指定此重写规则始终应用于此应用程序。
我猜这是你的问题:
- 您运行书签,它会阻止在当前页面上注销。
- 右键单击或 ctrl+单击当前页面上的链接以打开一个新选项卡,该新选项卡最终会将您注销。
可能的解决方案:除了当前代码之外,书签还在页面中的每个链接上附加一个单击事件侦听器。如果侦听器检测到 CTRL+单击,则会阻止默认操作,执行window.open
,然后修改新选项卡中的代码。
为了防止在同一选项卡中重新加载或导航时当前窗口中出现相同的问题,bookmaklet 可以打开一个小子窗口来监控其parent
。如果监视器检测到父级不再被正确修改,它可以重新应用代码。
我想知道的一件事是,如果您长时间打开页面而没有活动,您当前的解决方案是否真的有效。服务器可能有自己的内部会话超时,无论您在客户端进行何种修改,都会发生该超时。如果是这样,可以通过通过 AJAX 执行良性后台页面提取的计时器来防止这种情况。
超时有两个部分。首先是 58 分 30 秒后触发的AlertUser
超时。第二个是服务器上的会话超时,显然可以通过向/Reconnect.aspx
发出GET请求来刷新。
ResetTimeout
函数为我们提供了有关如何处理AlertUser
超时的线索,但它不处理服务器端会话超时。因此,以此为起点,我们可以这样做:
setInterval(function(){
clearTimeout(timeoutID); // stop the AlertUser from happening
var img = new Image(1,1);
img.src = '/Reconnect.aspx'; // stop server session from expiring
},15*60*1000);
这应该删除所有超时。你可能认为我们可以在setInterval
之外做clearTimeout
,你可能是对的。但是页面上可能有重置AlertUser
超时的代码,因此在循环中执行此操作可以让您重新清除它以防万一。
setInterval
每 15 分钟 (15*60*1000) 运行一次,是页面超时 58 分钟的 4 倍。但以防万一页面超时值发生变化,您可以将 15 分钟更改为另一个数字。不要太频繁地这样做,否则该网站可能会将您列入垃圾邮件的黑名单。
此外,上面的代码不会保护,以防您不小心加载书签两次。您可以通过首先清除任何以前的setInterval
来使其更安全:
if (typeof anti_timeout != 'undefined') {
clearInterval(anti_timeout); // clear previous anti-timeout timer
}
anti_timeout = setInterval(function(){
clearTimeout(timeoutID);
var img = new Image(1,1);
img.src = '/Reconnect.aspx';
},15*60*1000);
- 如何识别我的网站中的慢速设备
- 用Javascript更改我网站上的字体大小
- 有任何可能将facebook实时信使整合到一个网站中
- 将电视直播频道从网站嵌入我的网站
- Windows 8固定的网站互动程序
- 门户网站:当地时间有多有用
- 正在删除node.js中已验证的网站
- 为什么在这个网站上不能通过JS访问元素
- 需要使用谷歌应用程序脚本列出谷歌域下的所有网站
- 为什么只有工厂在棱角分明的网站上被提及
- 从应用程序脚本检查谷歌网站访问权限
- 使用谷歌网站翻译器自动翻译网页
- 如何在asp.net中自动注销我的网站10分钟后,在我的网站处于空闲状态
- 书签,以防止在网站上自动注销
- 注销我的网站,但不注销facebook
- 网站的Facebook登录:处理用户Facebook注销的最佳实践
- Facebook注销按钮,asp.net网站
- 不能注销用户从网站时,他们使用连接通过facebook
- 如何修复每当我点击网站内的页面链接,我得到注销
- AngularJS-从网站注销不起作用