更新Safari应用程序扩展内容拦截器列表

3

如何在Safari App Extension中创建本地内容拦截器后,在插件加载后更新静态JSON列表?

目前我所能看到的唯一方法是部署一个全新版本的应用程序,这对用户来说不会自动更新。

是否可以从另一个URL更新内容拦截器的JSON阻止列表文件,而无需通过Apple商店更新Safari App Extension?

1个回答

1

是的,你可以更新JSON阻止列表。

步骤1:

创建新的JSON内容阻止规则。

步骤2:

将JSON文件保存在共享容器中。

fileprivate func saveRuleFile(ruleList:[Rule]) {
        let encoder = JSONEncoder()
        if let encoded = try? encoder.encode(ruleList) {

            let sharedContainerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xxx.xxxx.xxx")
            print("sharedContainerURL = \(String(describing: sharedContainerURL))")

            if let json = String(data: encoded, encoding: .utf8) {
                print(json)
            }

            if let destinationURL = sharedContainerURL?.appendingPathComponent("Rules.json") {
                do {
                    try  encoded.write(to: destinationURL)
                } catch {
                    print (error)
                }
            }
        }
    }

第三步:调用此方法请求内容阻止器重新加载规则

SFContentBlockerManager.reloadContentBlocker(withIdentifier:"com.xxxx.xxx.xxxx", completionHandler: nil)

步骤:4 从共享容器中读取JSON规则文件,并将规则传递给内容拦截器扩展程序

func beginRequest(with context: NSExtensionContext) {
        let sharedContainerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xxx.xxx.xxx")
        let sourceURL = sharedContainerURL?.appendingPathComponent("Rules.json")
        let ruleAttachment = NSItemProvider(contentsOf: sourceURL)
        let item = NSExtensionItem()
        item.attachments = ([ruleAttachment] as! [NSItemProvider])
        context.completeRequest(returningItems: [item], completionHandler: nil)
    }

beginRequest会在每个请求中被调用吗?还是只在Safari引导期间调用?我正在尝试从服务器获取域名是否被允许,然后阻止或允许该请求。我知道这很慢,但现在我只是在测试一些东西。 - Tony
1
不,beginsRequest并不会在每个请求时被调用,只有当您调用FContentBlockerManager.reloadContentBlocker(withIdentifier:"com.xxxx.xxx.xxxx", completionHandler: nil)时才会被调用。 - Imran
按照代码,对我来说它在阻塞时可以工作,但是在非阻塞时却不能。顺便说一下,我从JSON中删除了触发器/动作块以停用过滤器。 - Daniyal dehleh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接