我听说 iOS 支持内容拦截器,所有的拦截都是由blockerList.json
App Bundle 中的一个名为的文件完成的。虽然我知道这SFContentBlockerManager.reloadContentBlockerWithIdentifier()
会重新加载blockerList.json
. 但是,我认为这没有任何用处;这blockerList.json
是主包的一部分,不能修改。因此,有什么方法blockerList.json
可以修改(或者扩展名可以指向另一个文件,被删除和重新创建,不使用 JSON 等)?
问问题
1850 次
2 回答
5
您不必使用blockerList.json
捆绑包中的 JSON 源。您可以做一些不同的事情来动态更改内容阻止程序。
- 您可以让扩展程序从服务器下载新的 JSON 文件,并在应用程序触发时更新阻止程序
- 将应用程序和内容阻止程序扩展程序放在同一个应用程序组中,以便可以在两者之间传递数据,然后执行以下操作之一:
- 让应用程序在共享组目录中创建/修改一个 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 回答