2010-07-01 35 views
2

我有一種情況,我想確認用戶仍然可以在頁面獲得焦點時編輯頁面。這將阻止他們放棄一個選項卡的編輯權限,然後返回到原始選項卡進行編輯,或放棄編輯權限,然後使用瀏覽器BACK按鈕返回到他們仍然可以編輯的頁面。 window.onfocus在IE,FF和Safari中完全適用於此,但在Chrome中不適用。它是否正確?我錯過了明顯的東西嗎?有沒有解決方法?下面是在IE,FF和Safari瀏覽器的工作原理代碼:window.onfocus事件不會在Google Chrome中觸發?

$(window).bind('focus', function() { 
    $.getJSON("do_check.php", {id: 'foo'}, function(data){ 
     if (! data.SUCCESS) { 
     $("#not_editor_dialog").dialog('open'); 
     } 
    }); 
}); 

注意的是,以上結合使用jQuery的事件,而jQuery的少的版本也無法在Chrome:

window.onfocus = function() { 
    etc. 
}; 

謝謝!

+0

你嘗試過jQuery方法'.focusin'嗎? – jantimon 2010-07-01 16:14:49

+0

事實證明,我是一個白癡(我討厭它,當這種情況發生)。問題不在於焦點事件,而是Chrome緩存了getJSON響應,因此它沒有在後端獲取更改。我被誤導是因爲它以前工作過,而我改變的唯一的東西(我認爲)是我正在使用的事件,但顯然在這個過程中,我「欺騙Chrome不使用緩存響應」需要調整。 – 2010-07-01 16:43:01

回答

0

適用於Chrome。

例子:http://jsfiddle.net/KuZSu/(點擊右下方的面板集中)

$(window).bind('focus', function() { 
    $('body').append('focused<br>'); 
});​ 

如果getJSON()請求不爲你工作,這可能是因爲Chrome提供了安全問題,讓AJAX請求時,你'正在從文件系統託管頁面。

看到這個問題:Problems with jQuery getJSON using local files in Chrome

在頁面上的意見提供了一個解決方案來自尼克Craver「嘗試通過命令行啓動Chrome使用 - 禁用網絡安全,看看它的工作原理?」

0

以上都不起作用。他們只是開了太多次。

我相信這也是很長的路要走:

var focused = false; 

$(window).bind('focus', function() {     
    if (!focused) { 

     // * 
     // * Do stuff on focus here 
     // * 

     focused = true; 
    } 
}); 

$(window).bind('blur', function() { 
    if (focused) { 
     focused = false;  
    } 
}); 

應該能夠在不jQuery的做了!