对于Safari中的某些输入,不会触发addGlobalMonitorForEventsMatchingMask处理程序

时间:2017-10-03 11:05:35

标签: objective-c macos cocoa safari

我正在尝试为我的mac应用程序检测系统范围的键盘输入。为此,我使用以下代码:

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

虽然这可以完美地运行并跟踪在Safari上任何位置输入的键盘输入,但只有当用户尝试在任何网页中输入密码时,处理程序才会被触发(例如:facebook登录页面中的密码框,任何带密码框的登录页面) 。虽然可以跟踪用户名输入,但密码输入不能。

这是预期的行为还是我遗漏了一些东西,因为这与Chrome完美配合。所有键盘输入都可以通过Google Chrome的全局监视器进行跟踪。但仅限于Safari中的这种特殊情况。

1 个答案:

答案 0 :(得分:0)

发送到NSSecureTextField(或NSSecureTextFieldCell)的关键事件被屏蔽,以便事件监视器不会拦截或读取它们。这是一项安全功能,可以防止应用程序在输入密码时窃取密码,并且没有API可以绕过它。