第1章 Electron 应用的可访问性
可访问性
由于 Electron 应用的底层都是 HTML,因此其可访问性问题与网站相似。
手动启用可访问性功能
当检测到辅助技术(如 Windows 上的 JAWS 或 macOS 上的 VoiceOver)时,Electron 应用会自动启用可访问性功能。更多细节请参阅 Chrome 的可访问性文档。
你还可以通过以下两种方式手动切换这些功能:在 Electron 应用内部操作,或在第三方原生软件中设置标志位。
使用 Electron API
通过 app.setAccessibilitySupportEnabled(enabled) API,你可以在应用偏好设置中手动向用户暴露 Chrome 的可访问性树。请注意,用户系统自带的辅助工具具有更高优先级,并会覆盖此设置。
在第三方软件中
macOS
在 macOS 上,第三方辅助技术可以通过编程方式设置 AXManualAccessibility 属性,来切换 Electron 应用内的可访问性功能:
使用 Objective-C:
```objectivec CFStringRef kAXManualAccessibility = CFSTR("AXManualAccessibility");
+ (void)enableAccessibility:(BOOL)enable inElectronApplication:(NSRunningApplication *)app { AXUIElementRef appRef = AXUIElementCreateApplication(app.processIdentifier); if (appRef == nil) return;
CFBooleanRef value = enable ? kCFBooleanTrue : kCFBooleanFalse; AXUIElementSetAttributeValue(appRef, kAXManualAccessibility, value); CFRelease(appRef); } ```
使用 Swift:
```swift import Cocoa
let name = CommandLine.arguments.count >= 2 ? CommandLine.arguments[1] : "Electron" let pid = NSWorkspace.shared.runningApplications.first(where: {$0.localizedName == name})!.processIdentifier let axApp = AXUIElementCreateApplication(pid) let result = AXUIElementSetAttributeValue(axApp, "AXManualAccessibility" as CFString, true as CFTypeRef) print("Setting 'AXManualAccessibility' \(error.rawValue == 0 ? "succeeded" : "failed")") ```