Je veux capturer le Ctrl kbd> - r kbd> ou raccourci F5 kbd> sur le navigateur pour l'empêcher de procéder à un rafraîchissement du navigateur, mais effectuera plutôt un rafraîchissement personnalisé. J'ai pu capturer ctrl kbd> - r kbd> sur Safari et FF en utilisant: p> mais cela ne " t Travailler sur IE. Y a-t-il un moyen de faire cela sur IE? P> Mise à jour: Pour les personnes qui demandent pourquoi je fais cela en premier lieu: je voulais juste faire une application personnalisée, mais je voulais Évitez d'avoir un bouton "Actualiser" car je décourage un peu à l'aide de l'actualisation (nous avons une application FLEX FLEX FLEX). Nous avons fini par passer à F8 car F5 était trop difficile de travailler sur tous les navigateurs. Em> p> p>
8 Réponses :
JavaScript ouvert strong> http: //www.openjs .com / scripts / événements / clavier_shortcutts / p> pour certaines touches (F1, F4), vous devez ouvrir une nouvelle fenêtre de navigateur sans la barre d'adresse. P> Exemple STRT> P> Ouvrez une nouvelle fenêtre, sans ornements: p> JavaScript pour utiliser la bibliothèque: p> <body onload="disableShortcuts();">
J'ai essayé cela et cela a fonctionné sur IE8, Chrome, Safari, Opera et FF pour moi - pour la clé F5.
Mieux: var false_function = fonction () {renvoie false; }; code>.
YUI a un gestionnaire de clé qui fonctionnera sur tous les navigateurs p>
http://developer.yahoo.com/yui/examples/container /keylistener.html p>
Je pense que le problème avec le code ci-dessus est que c'est-à-dire que c'est pas transmettre l'événement à la fonction. Il le met dans une variable globale appelée fenêtre.Event. P>
Je suggère d'essayer l'auditeur de clé Yui, ce sera une solution assez propre et vous n'avez pas besoin d'utiliser toute la bibliothèque, juste les pièces dont vous avez besoin. P>
I Taxe Document.body.onbeForeRunload code> est le chemin. Vous pouvez même empêcher l'utilisateur de quitter la page avec cela. Je ne suis pas sûr de savoir comment détecter si c'est un rafraîchissement ou s'il surfe en train de surfer quelque part d'ailleurs (document.location peut-être peut-être?) P>
Il n'y a pas de solution solide pour remplacer les touches de fonction des navigateurs. P>
Internet Explorer STRT> a certaines clés qui ne peuvent pas être remplacées et certaines clés qui - même lorsqu'ils sont remplacées - exécute toujours le comportement par défaut - comme la touche F11, qui passe en mode plein écran, et la clé F1 qui ouvre une fenêtre d'aide. P>
et enfin .. opéra fort> .. qui est à peu près aussi difficile que l'explorateur Internet. P>
Et le comportement par défaut est différent de la version à la version. C'est comme se promener dans un champ de mine .. Vavante aux yeux. :) p>
essayer de remplacer ctrl kbd> + r kbd> / f5 kbd> sent comme une mauvaise conception. p>
Quel problème essayez-vous de résoudre? p>
@Dave Jarvis: Êtes-vous sûr que cela fonctionne dans Internet Explorer 8? Je n'ai eu aucune chance de faire ça.
@roosteronacid: sur IE8, je devais créer une solution unique: ajouter "Var code;" Après la ligne: "var func = fonction (e) {". IE8 semble être plus strict avec JS.
@Dave Jarvis: Compte tenu du fait que cela ne peut pas être fait à travers tous les navigateurs de niveau A, c'est mauvais design. Je suis cependant d'accord avec l'idée.
Depuis le "Comment" a déjà été couvert, j'ai pensé mentionner que vous devez être au courant des limites d'utiliser JavaScript pour quelque chose comme ça. p>
Par exemple, dans Safari (et éventuellement d'autres), si vous pouvez accéder au champ de saisie em> du navigateur, vous pouvez toujours émettre des commandes de touches de raccourci, mais elle est hors de la portée de votre JavaScript. Si l'utilisateur le fait, tout code maniable à l'événement clés que vous avez écrit ne sera pas invoqué et que la touche passe tout à fait bien. p>
Pour que les solutions que vous trouvez peuvent fonctionner, mais seront presque universellement défaires en quelque sorte en utilisant uniquement les fonctions de navigateur de base. P>
pour F11 KBD> sur IE
Ajoutez checkkey sur l'événement ONKEDOWDOWDOWDOWDOWDOWDOWN pour le corps (ONKEYDOWN = 'Retour Checkkey (événement)') CODE>
function checkKey(e) {
var alt = e.altKey;
var key = e.keyCode;
var type = e.srcElement.type;
ctrl = event.ctrlKey
if ( alt || ((key == 8)&&(type != "text" && type != "textarea" && type != "password")) || (ctrl&&(key == 82)) || (key == 122) ) {
event.keyCode = 0;
e.keyCode = 0;
event.returnValue = false;
return false;
}
return true;
}
Avez-vous essayé Cela a fonctionné pour moi (bien, je l'ai techniquement utilisé avec un gestionnaire de clé de clé JQuery, pas keycode == 82 code>, pas
114 code>? Les codes de clé ne sont pas identiques à ASCII / Charcodes, Donc, il n'y a pas de considération majuscule / minuscule.
document.onkeypress code>): p>
document.onkeypress = function(e){
if ((e.ctrlKey || e.metaKey) && e.keyCode == 82) // Ctrl-R
e.preventDefault();
}
J'ai réussi à résoudre un problème similaire à celui-ci uniquement en utilisant uniquement JavaScript Noyau. Le code est divisé en deux parties, définition et implémentation, mais les pièces peuvent être fusionnées si elle est nécessaire.
implémentation forte> p> juste Ajoutez le code-clés que vous souhaitez intercepter et modifier le rappel en conséquence p> p>
Voulez-vous simplement empêcher de repousser une forme?
Il y a de très bonnes raisons de faire cela. Considérez un système de saisie de données de la feuille de temps basé sur des postes de bureau où des centaines d'utilisateurs ont été formés pour utiliser certaines touches de raccourci. Vous souhaitez migrer l'application vers une application Web comportant des contraintes de type similaire à l'application de bureau. Pour le droit ou le tort, s'il s'agit de la décision finale de la direction, il est obligatoire obligatoire de remplacer le comportement par défaut des touches de fonction. Il existe de nombreux autres scénarios où vous souhaitez remplacer les comportements de clavier par défaut, la plupart d'entre eux que j'imaginais d'être destiné aux applications Web internes.
Pour ajouter à la liste de Dale, il existe de nombreux appareils portables dans les entrepôts (poche en cours d'exécution, c'est-à-dire) qui peuvent ne pas avoir d'écran tactile et doivent utiliser des touches de fonction.