正如您在iOS9中所知,Apple为Safari添加了内容阻止功能。该内容拦截器的规则以JSON格式编写。如果其中一条规则不正确,Safari将停止处理所有规则,您无法知道导致该问题的规则。
是否有办法检查哪些确切的规则导致Safari停止处理内容阻止的所有规则?
答案 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);
}
}
}