2017-10-03 2 views
0

J'essaie de détecter les entrées de clavier système pour mon application mac. Pour ce faire, je suis en utilisant le code ci-dessous:Le gestionnaire addGlobalMonitorForEventsMatchingMask n'est pas déclenché pour certaines entrées dans Safari

[NSEvent addGlobalMonitorForEventsMatchingMask:NSEventMaskKeyDown 
handler:^(NSEvent *event) { 
     NSString *eventChars = [event characters]; 
     unichar keyChar = [eventChars characterAtIndex:0]; 
     NSLog(@"keyboard char is %c",keyChar); 
    }]; 

Bien que cela fonctionne parfaitement et les pistes d'entrée du clavier est entré partout sur Safari, le gestionnaire ne soit pas déclenchée que si l'utilisateur essaie d'entrer un mot de passe dans une page web (ex: boîte de mot de passe dans la page de connexion de facebook, n'importe quelle page de connexion avec la boîte de mot de passe). Bien que l'entrée de nom d'utilisateur puisse être dépistée l'entrée de mot de passe ne peut pas.

Est-ce le comportement attendu ou est-ce que je manque quelque chose parce que cela fonctionne parfaitement avec Chrome. Toutes les entrées de clavier peuvent être suivies avec le moniteur global incase de Google Chrome.Mais échoue seulement pour ce cas particulier dans Safari.

Répondre

0

Les événements clés envoyés à NSSecureTextField (ou NSSecureTextFieldCell) sont masqués de sorte qu'aucun moniteur d'événements ne puisse les intercepter ou les lire. Ceci est une fonctionnalité de sécurité pour empêcher les applications de voler les mots de passe au moment où ils sont tapés, et il n'y a pas d'API pour le contourner.