Rya*_*die 16 cocoa nsuserdefaults ios safari-content-blocker
我正在开发Safari Content Blocking扩展程序.我打算在禁用扩展时显示设置说明,如果反向启用则显示设置.如何确定用户是否启用了扩展程序?
我已经看到这种方法来检测自定义键盘是否被激活,但是没有NSUserDefaults与Safari内容拦截器相关的键.
您可以使用a SFSafariViewController来加载自定义网站.该网站检查是否能够显示您的内容拦截器应阻止的内容.然后重定向到您的应用之前注册的相应自定义网址(成功/失败).你甚至可以使用一个隐藏的Safari浏览器没有动画,以避免从用户的角度来看任何分心(如图所示这里).(我猜这种技术被前内容拦截器和平使用)
contentBlockerEnabled)使用SFSafariViewController显示自定义的网站,包括以下规则blockerList.json:
{
"action": {
"type": "css-display-none",
"selector": ".blocked_selector"
},
"trigger": {
"url-filter": ".*"
}
}
Run Code Online (Sandbox Code Playgroud)if($('.blocked_selector').css('display') == "none") {
// Content blocker enabled
}
Run Code Online (Sandbox Code Playgroud)重定向到自定义URL(成功/失败)
application:openURL:options:(基于被叫url的成功/失败)继Tilo的假设之后,我构建了提出的解决方案.我写了关于我在Medium上学到的东西,你可以从GitHub中获取源文件.
TL; DR由于内容阻止规则数据库更新导致的延迟,它只能在气质上工作.一种潜在的解决方法是重定向测试页面以创建人为延迟.
从iOS 10开始,有一种新方法SFContentBlockerManager可以支持:
getStateOfContentBlocker(withIdentifier:completionHandler:)
你这样称呼它(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
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |