内容块 Safari 规则检查

Content Block Safari rule check

正如您在 iOS9 中所知,Apple 为 Safari 添加了内容阻止。该内容拦截器的规则以 JSON 格式编写。如果其中一条规则不正确,Safari 将停止处理所有规则,您无法知道是什么规则导致了该问题。

是否有任何方法可以检查导致 Safari 停止处理所有内容阻止规则的确切规则?

我遇到了同样的问题,最后 Safari 打印了自 OSX 10.11.1 beta 3 以来的内容拦截器日志。因此,如果您已经更新到 OSX 的那个或更新版本,那么您应该能够查看内容拦截器是否阻止某些内容在 Safari 的控制台中显示。

遗憾的是,它没有打印出具体触发了哪条规则。 所以我写了一个简单的函数,它接受内容拦截器 JSON 文件和 url 并查找是否有任何规则阻止 url.

NSString *searchedString = @"https://r5---sn-3c24lx7y.googlevideo.com/videoplayback?id=o-AFLsF5lK1HyyhDtjGx567tfBd4Dmuia67Exbs7LURFrZ&sparams=clen,dur,expire,gir,id";

NSData *data = [NSData dataWithContentsOfFile:@"/path/to/your/adblock.json"];
NSArray *rules = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
for (NSDictionary *rule in rules){
    NSDictionary *action = rule[@"action"];
    if ([action[@"type"] isEqualToString:@"block"]){
        NSString *urlFilter = rule[@"trigger"][@"url-filter"];
        NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern: urlFilter options:0 error:nil];
        NSArray* matches = [regex matchesInString:searchedString options:0 range: NSMakeRange(0, searchedString.length)];
        if (matches.count > 0){
            NSLog(@"match %@", rule);
        }
    }
}