2010-07-01 4 views
2

J'ai une situation où je veux confirmer qu'un utilisateur est toujours autorisé à modifier une page lorsque la page est mise au point. Cela les empêchera d'abandonner la fonction d'éditeur dans un onglet, puis de revenir à modifier dans l'onglet d'origine, ou d'abandonner la fonction de rédaction, puis d'utiliser le bouton RETOUR du navigateur pour revenir à la page où ils peuvent encore modifier. window.onfocus fonctionne parfaitement dans IE, FF et Safari, mais pas dans Chrome. Est-ce correct? Est-ce que je manque quelque chose d'évident? Y at-il un travail autour? Voici le code qui fonctionne dans IE, FF et Safari:L'événement window.onfocus ne se déclenche pas dans Google Chrome?

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

Notez que le lie au-dessus de l'événement avec jQuery, mais la version jQuery moins échoue également dans Chrome:

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

Merci !

+0

avez-vous essayé la méthode jQuery '.focusin'? – jantimon

+0

Il s'avère que je suis un idiot (je déteste quand cela arrive). Le problème n'était pas lié à l'événement de mise au point, mais avec la mise en cache de Chrome dans la réponse getJSON, il ne détectait donc pas la modification sur le serveur principal. J'ai été induit en erreur parce que cela fonctionnait avant, et la seule chose que j'ai changé (je pensais) était quel événement j'utilisais, mais apparemment dans mon processus "mon truc Chrome en n'utilisant pas la réponse en cache" bidouille. –

Répondre

0

Fonctionne pour moi dans Chrome.

Exemple:http://jsfiddle.net/KuZSu/ (cliquez sur le panneau en bas à droite pour se concentrer)

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

Si la demande getJSON() ne fonctionne pas pour vous, il peut être parce que Chrome a des problèmes de sécurité avec faire la demande AJAX lorsque vous 'héberge la page du système de fichiers.

Voir cette question: Problems with jQuery getJSON using local files in Chrome

Une solution proposée dans un commentaire sur cette page provient de Nick Craver: « Essayez de lancer le chrome via la ligne de commande en utilisant --disable-web-sécurité et voir si cela fonctionne ? "

0

Rien de ce qui précède ne semble fonctionner. Ils ne tirent que trop souvent.

Je crois que c'est aussi un moyen d'aller:

var focused = false; 

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

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

     focused = true; 
    } 
}); 

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

devrait-il être en mesure de le faire sans trop jQuery!

Questions connexes