2013-04-16 168 views
6

我想檢測用戶什麼時候離開我的頁面(例如打開一個新標籤頁),這樣我就可以停止倒計時。我做到了使用:

$(window).blur(function() { 
//stop countdown 
}); 

但我有我的iFrame網頁內,當用戶點擊它,但我不希望上述事件時,有人點擊的Iframe執行倒計時也將停止。

有什麼想法?

更新,我想多一點,在此基礎上回答Click-event on iframe?

iframeDoc = $('iframe').contents().get(0); 
$(iframeDoc).click(function(){ 
    //maybe remove blur event? 
}); 

更新: 蒂姆·B液的工作:

$(window).blur(function() { 
// check focus 
if ($('iframe').is(':focus')) { 
    // dont stop countdown 
} 
else { 
    // stop countdown 
}     
}); 

現在我已經從移除焦點每當模糊事件被調用時,Iframe,否則如果用戶在聚焦Iframe之後改變標籤,則倒計數不會停止。我試着用這樣的條件:

if ($('iframe').is(':focus')) { 
    // dont stop countdown 
    $("iframe").blur() 
    $(window).focus(); 
} 

但它沒有工作。任何想法?

+0

你的iframe中有什麼? –

+0

外部網站dom。 – Jirico

+0

我解決你的差不多 問題見我的答案在 http://stackoverflow.com/questions/9880193/how-can-i-capture-the-blur-and-focus-of-the -entire-browser-window/17603566#17603566 –

回答

3

一個解決方案是檢查iframe是否有焦點,然後不停止計時器。例如

$(window).blur(function() { 
    // check focus 
    if ($('iframe').is(':focus')) { 
     // dont stop countdown 
    } 
    else { 
     // stop countdown 
    }     
}); 

現在這樣的工作,但是如果你的iframe具有焦點,當用戶更改標籤,倒計時不會停止。所以在這種情況下,您需要考慮一個優雅的解決方案,以便將焦點從iframe轉移到之前。例如,如果用戶在iframe內單擊,則將焦點內容移回父窗口。

編輯 - 更新的答案,包括額外的iframe功能

好了,所以我一直在玩有關與此。現在我不知道你的iframe中有什麼內容,但是你可以添加一些代碼,這個代碼基本上把焦點發回到父窗口中的一個對象,當點擊時。例如

在您的iFrame

<script> 
    $(function() { 
     $(document).click(function() { 
      // call parent function to set focus 
      parent.setFocus(); 
     }); 
    }); 
</script> 

在你的主頁

<script> 

    function setFocus() { 
     // focus on an element on your page. 
     $('an-element-on-your-page').focus(); 
    } 

    $(function() { 

     $(window).focus(function (e) { 
      // bind the blur event 
      setBindingEvent(); 
     }); 

     var setBindingEvent = function() { 
      // unbind 
      $(window).unbind('blur'); 
      $(window).blur(function() { 
       // check focus 
       if ($('iframe').is(':focus')) { 
        // unbind the blur event 
        $(window).unbind('blur'); 
       } 
       else { 
        // stop countdown 
       }     
      }); 
     }; 

     setBindingEvent(); 

    }); 
</script> 

這將允許您點擊iframe中,設置焦點回到主頁面,然後停止倒計時。

+0

它的工作。謝謝!現在我試圖從iframe中移除焦點。我更新了我的問題,如果你想查看它,因爲它不起作用。我非常感謝你的幫助,謝謝。 – Jirico

+0

再次感謝您的幫助。但是iFrame裏面的腳本不起作用,可以像這樣在iFrame中放置腳本標記嗎? – Jirico

+0

我編輯了你的第一個答案,因爲它的工作原理非常簡單,而且我無法重現你的第二個答案:) – Jirico

1

由於iframe的隔離,其內部的單擊會算作父級的模糊。如果iframe的內容可以用ajax引入,那將是更好的選擇。

+0

由於用戶可以在iframe內導航,因此這會變得複雜。如果用戶點擊Iframe,我不能刪除模糊事件嗎?我更新了我的問題,請給它看看。 – Jirico

+0

看到http://stackoverflow.com/questions/2381336/detect-click-into-iframe-using-javascript – Mooseman