我在做一台Safari Content Blocking extension。如果扩展被禁用,我打算显示设置说明,反之,如果扩展被启用,则显示设置。如何确定扩展是否已被用户启用?
我见过this method检测自定义键盘是否被激活,但NSUserDefaults
上没有与Safari内容阻止程序相关的键。
发布于 2016-10-04 08:43:32
从iOS 10开始,SFContentBlockerManager
中有一个新方法来支持这一点:
你这样称呼它(Swift 3):
SFContentBlockerManager.getStateOfContentBlocker(withIdentifier: "your.identifier.here", completionHandler: { (state, error) in
if let error = error {
// TODO: handle the error
}
if let state = state {
let contentBlockerIsEnabled = state.isEnabled
// TODO: do something with this value
}
})
发布于 2015-11-10 16:55:40
你可以利用一个SFSafariViewController
来加载一个自定义网站。此网站检查是否能够显示您的内容阻止程序应该阻止的内容。然后重定向至您的应用程序之前注册的相应自定义url (成功/失败)。您甚至可以使用隐藏的Safari View Controller而不使用动画,以避免从用户的角度分散注意力(如here所示)。(我猜这项技术是由前内容阻止程序Peace使用的)
步骤
应用程序
contentBlockerEnabled
) SFSafariViewController
显示自定义网站,并在blockerList.json
中包含以下规则:{“操作”:{“类型”:“css-显示-无”,“选择器”:".blocked_selector“},”触发器“:{ "url-filter":".*”} }
网站
if($('.blocked_selector').css('display') == "none") { //内容阻止程序已启用}
应用程序
application:openURL:options:
发布通知(成功/失败基于调用的url)更新18/01
在Tilo's hypothesis之后,我构建了建议的解决方案。我写了关于I learnt on Medium和你可以抓取the source files from GitHub的东西。
TL;DR它是有效的,但由于内容阻止规则数据库更新的延迟,它只能在性情上起作用。一种潜在的解决方法是重定向测试页以创建人为延迟。
https://stackoverflow.com/questions/33452917
复制相似问题