内容块Safari规则检查

时间:2015-09-23 22:21:41

标签: ios swift mobile-safari

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

是否有办法检查哪些确切的规则导致Safari停止处理内容阻止的所有规则?

1 个答案:

答案 0 :(得分:1)

我有同样的问题,最后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);
        }
    }
}