【问题标题】:addGlobalMonitorForEventsMatchingMask handler not getting triggered for certain inputs in SafariSafari 中的某些输入未触发 addGlobalMonitorForEventsMatchingMask 处理程序
【发布时间】:2017-10-03 11:05:35
【问题描述】:

我正在尝试为我的 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 完美配合。在谷歌浏览器的情况下,所有键盘输入都可以通过全局监视器进行跟踪。但只有在 Safari 中这种特殊情况才会失败。

【问题讨论】:

    标签: objective-c macos cocoa safari


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多