window.onfocus事件在Google Chrome中无法触发?

时间:2010-07-01 16:11:05

标签: javascript jquery google-chrome

我有一种情况,我想确认当页面获得焦点时仍允许用户编辑页面。这将阻止他们在一个选项卡中放弃编辑,然后返回到原始选项卡中的编辑,或放弃编辑,然后使用浏览器BACK按钮返回到他们仍然可以编辑的页面。 window.onfocus在IE,FF和Safari中完美适用于此,但在Chrome中则不行。它是否正确?我错过了一些明显的东西吗有解决方法吗?以下是适用于IE,FF和Safari的代码:

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

请注意,上面使用jQuery绑定事件,但Chrome中的jQuery-less版本也失败了:

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

谢谢!

2 个答案:

答案 0 :(得分: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

该页面评论中提供的解决方案来自 Nick Craver “尝试使用--disable-web-security通过命令行启动chrome并查看它是否有效?”< / em>的

答案 1 :(得分: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!