2016-03-23 13 views
0

ブラウザで別のtabに設定されているtimeoutをクリアするにはどうすればよいですか?ClearTimeoutを別のタブに設定しました

私は2番目のタブでclearIdleTimeout()を呼び出す場合、それはprevious tab

+0

あなたが行うことができない、そのウィンドウ '経由で(両方のタブが同じドメインからであり、あなたが一方から他方へのリンクを持っている場合を除き.opener'など)。タイマーの識別子は単なる数値であり、暗黙的なウィンドウ単位の名前空間があります。 – Pointy

+0

両方のタブが同じドメインにある場合、ユーザーがアイドル状態の場合は自動ログアウト機能を実装していますが、2番目のタブで作業しているため、最初のタブをログアウトする必要はありません – dzona

+0

'idleTimeout'は変数 – guest271314

答えて

1

tab「A」でtimeoutセットをクリアしないlocalStorageにタイムアウトの参照を格納することで試みたが、timeout

function setIdleTimeout() { 
    var idleTimeout = setTimeout(function() { 
     //autologout 
    }, 20000); 
    localStorage.setItem('idleTimeout', idleTimeout); 
} 

function clearIdleTimeout() { 
    var idleTimeout = localStorage.getItem('idleTimeout'); 
    clearTimeout(idleTimeout); 
    localStorage.setItem('idleTimeout', idleTimeout); 
} 

明確ではありませんでした

var timeout, interval; 

timeout = setTimeout(function() { 
    alert(123) // this should not be called 
    clearTimeout(timeout) 
    timeout = null; 
    clearInterval(interval); 
    interval = null; 
}, 20000); 
localStorage.setItem("timeout", timeout); 

interval = setInterval(function() { 
    console.log("checking localStorage:", localStorage.getItem("timeout")); 
    // if `!localStorage.getItem("timeout")` : `true` 
    // call `clearTimeout()` with `timeout` as paramter 
    if (!localStorage.getItem("timeout")) { 
    clearTimeout(timeout); 
    timeout = null; 
    alert("cleared"); 
    clearInterval(interval); 
    interval = null; 
    } 
}, 100) 

plnkr http://plnkr.co/edit/wttPFS5RLgCu5OnF05Z1?p=info

tab「B」

var t; 
t = setTimeout(clearTabTimeout, 5000); 

// clear `timeout` at `tab` "a" 
function clearTabTimeout() { 
    // remove `"timeout"` item from `localStorage` 
    localStorage.removeItem("timeout"); 
    console.log(localStorage); 
} 

plnkr http://plnkr.co/edit/CgQqlVIUzUo7zeHCb2Ca?p=preview

+0

他のタブで設定したlocalStorage timeoutフラグをチェックしてオーバーヘッドが気に入らなくても、回答として受け付けます。しかし、アイデア+1、私は最初に解決しようとしていた問題の解決に私を導いた。ありがとう@ guest271314 – dzona

関連する問題