我需要保护我的 WebView 的 URL(使其不可用于辅助功能检查器)。
不要写信给我说所有流量都可以被嗅探等等。我是一名逆向工程师,我足够了解这一切,而且我知道我想要什么。
我需要保护我的 WebView 的 URL,点。
WebView 的 URL 不存储在 WebView 中,而是嵌套在其子级的第一个子级中,具有 WebAccessibilityObjectWrapper
类和“HTML 内容”类型。
不幸的是,WebAccessibilityObjectWrapper
类是 Apple 的“封闭”类,我们无法扩展它。
iOS(5.0+)有一个很棒的功能,accessibilityElementsHidden
,它解决了我的问题。
但 OS X 却没有。
我的解决方案:
- 覆盖WebView的
NSAccessibilityChildrenAttribute
,并为其值传递空数组。它确实可以防止在 Inspector 中走过“ child ”属性(property)。但不幸的是,这不是来自 Inspector 的“点”功能。 - 以编程方式在辅助功能子项中查找“HTML 内容”并使用它。不幸的是,我们需要在每次 URL 加载后执行此操作,并且没有专门的事件来执行此操作,它太脏了。
如何更优雅的解决?
最佳答案
iOS 和 macOS 中的辅助功能协议(protocol)略有不同。在 iOS 中,使“ View ”对 VO 技术透明比在 macOS 中更简单。
您可以使用的属性有:
- 辅助功能元素:您设置为
false
; - 辅助功能角色:您需要将其设置为
无
; - 辅助角色描述:您可以设置为“”;
问题是,当 View 作为辅助功能元素被禁用时,它的所有 subview 都会变得可见。 NSButton 就是一个例子。只需禁用“外部”按钮对象,即:
let b = NSButton(...)
// setup your b
b.setAccessibilityElement(false)
并不能解决问题。 VO 仍然可以看到纽扣电池。
为 VO 隐藏 UI 元素并不简单,但很棘手。您需要玩一段时间才能了解您想要隐藏的特定对象的本质。
关于ios - OS X 中的accessibilityElementsHidden?如何保护我的应用程序的 UI 内部结构不被窃取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487857/