iOS9 未调用 Safari 内容拦截器扩展

iOS9 Safari content blocker extension not invoked

我正在玩 XCode7 beta,试图测试闪亮的新“Content Blocker Extension". The example class is adopting the same NSExtensionRequestHandling 协议作为(已知的)共享扩展。与共享扩展的本质区别在于 class 是一个普通的 NSObject,而不是 *ViewController subclass 因为,你知道,Blocker Extension 不应该显示任何 UI 反馈。那是我的至少理解。无论如何,应该将阻止程序声明 JSON 提供给扩展点的关键方法 beginRequestWithExtensionContext 不会被调用。扩展确实有 TRUEPREDICATE 作为其 NSExtensionActivationRule 并且 Safari 确实在新的 Safari 配置中承认我的主机应用程序的存在 "Content Blockers"。但仍然没有雪茄。

有谁知道它是否应该在测试版的早期就已经在运行,或者它只是一个新闻稿?

而且,哦,在我们讨论的时候,是否有 任何 声明性 JSON 格式的文档,或者它只是我的 Google-Fu辜负我? :)

还没有任何文档,但我发现 url 中的一些字符阻止了 JSON 的加载 它们是(我找到的那个,可能更多): +(as prefix) , $, |, ^

你怎么知道扩展没有被调用?

我构建了一个非常快速的测试应用程序,并从 beginRequestWithExtensionContext 方法中做了一个简单的 NSLog(),当扩展打开时它被调用。

此外,顺便说一句,+[SFContentBlockerManager reloadContentBlockerWithIdentifier:completionHandler:] 可让您随意从主应用程序触发更新。

Is there any documentation of that declarative JSON format

下面的 webkit.org 博客 post 似乎是内容拦截器 JSON 格式的当前最佳 "official" 文档。

https://www.webkit.org/blog/3476/content-blockers-first-look/

使用设备控制台查看设备的实时日志。在那里你会看到你的 NSLog() 调用。

  1. 从 Xcode 菜单中选择 Window -> 设备。
  2. 在左栏中选择设备。
  3. 单击右侧面板左下方的向上三角形以显示设备控制台。