5

我听说 iOS 支持内容拦截器,所有的拦截都是由blockerList.jsonApp Bundle 中的一个名为的文件完成的。虽然我知道这SFContentBlockerManager.reloadContentBlockerWithIdentifier()会重新加载blockerList.json. 但是,我认为这没有任何用处;这blockerList.json是主包的一部分,不能修改。因此,有什么方法blockerList.json可以修改(或者扩展名可以指向另一个文件,被删除和重新创建,不使用 JSON 等)?

4

2 回答 2

5

您不必使用blockerList.json捆绑包中的 JSON 源。您可以做一些不同的事情来动态更改内容阻止程序。

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

是的,我通过从 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"]; 
于 2015-10-27T12:49:20.690 回答