在iOS中重新加载内容拦截器

时间:2015-08-22 00:34:29

标签: ios json swift ios-extensions safari-content-blocker

我听说iOS支持内容拦截器,并且所有阻止都由位于App Bundle中的名为blockerList.json的文件完成。虽然我知道SFContentBlockerManager.reloadContentBlockerWithIdentifier()会重新加载blockerList.json中的数据。但是,我认为没有任何用处; blockerList.json是主要捆绑包的一部分,无法修改。因此,有没有办法可以修改blockerList.json(或者扩展可以指向另一个文件,删除并重新创建,不使用JSON等)?

2 个答案:

答案 0 :(得分:5)

您不必将捆绑包中的blockerList.json用作JSON源。您可以通过几种不同的方式动态更改内容拦截器。

  1. 您可以让扩展程序从服务器下载新的JSON文件,并在应用程序触发时更新阻止程序
  2. 将应用和内容屏蔽扩展程序放在同一个应用组中,以便可以在两者之间传递数据,然后执行以下操作之一:
    • 让应用程序在共享组目录中创建/修改JSON文件,该文件将由扩展程序
    • 读取
    • 让应用程序将数据写入共享组用户默认值,然后让扩展程序创建一个JSON文件以便加载

答案 1 :(得分:1)

是的,我通过从mainbundle json文件中读取所有阻止规则并在App Group标识符容器中创建了一个json文件(即SharedJsonFile.json)来完成此操作。然后我将所有规则写入SharedJsonFile.json。

[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER] URLByAppendingPathComponent:@" SharedJsonFile.json"]

所以每当我想进行修改并更新SharedJsonFile.json然后重新加载contentblocker。 要读取json,我在扩展程序的beginRequestWithExtensionContext方法中使用了此URL路径 -

NSURL * jsonPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER] URLByAppendingPathComponent:@" SharedJsonFile.json"];