首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定用户是否启用了应用程序的Safari内容阻止程序扩展

确定用户是否启用了应用程序的Safari内容阻止程序扩展
EN

Stack Overflow用户
提问于 2015-10-31 22:54:10
回答 2查看 2.6K关注 0票数 18

我在做一台Safari Content Blocking extension。如果扩展被禁用,我打算显示设置说明,反之,如果扩展被启用,则显示设置。如何确定扩展是否已被用户启用?

我见过this method检测自定义键盘是否被激活,但NSUserDefaults上没有与Safari内容阻止程序相关的键。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-04 08:43:32

从iOS 10开始,SFContentBlockerManager中有一个新方法来支持这一点:

你这样称呼它(Swift 3):

代码语言:javascript
复制
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
    }
})
票数 9
EN

Stack Overflow用户

发布于 2015-11-10 16:55:40

你可以利用一个SFSafariViewController来加载一个自定义网站。此网站检查是否能够显示您的内容阻止程序应该阻止的内容。然后重定向至您的应用程序之前注册的相应自定义url (成功/失败)。您甚至可以使用隐藏的Safari View Controller而不使用动画,以避免从用户的角度分散注意力(如here所示)。(我猜这项技术是由前内容阻止程序Peace使用的)

步骤

应用程序

  1. 使用NotificationCenter为success/failure
  2. Register注册自定义URL以进行通知回调(例如contentBlockerEnabled)
  3. 使用SFSafariViewController显示自定义网站,并在blockerList.json中包含以下规则:

{“操作”:{“类型”:“css-显示-无”,“选择器”:".blocked_selector“},”触发器“:{ "url-filter":".*”} }

网站

  1. Check for blocked content

if($('.blocked_selector').css('display') == "none") { //内容阻止程序已启用}

  • 重定向至自定义URL (成功/失败)

应用程序

  1. application:openURL:options:发布通知(成功/失败基于调用的url)

更新18/01

Tilo's hypothesis之后,我构建了建议的解决方案。我写了关于I learnt on Medium和你可以抓取the source files from GitHub的东西。

TL;DR它是有效的,但由于内容阻止规则数据库更新的延迟,它只能在性情上起作用。一种潜在的解决方法是重定向测试页以创建人为延迟。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33452917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档