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