2015-09-23 4 views
0

Как вы знаете, в iOS9 Apple добавила блокировку контента для Safari. Правила для этого блокатора содержимого записываются в формате JSON. Если одно из правил неверно, Safari перестает обрабатывать все правила, и вы не можете знать, какое правило вызвало эту проблему.Проверка правильности кода блока содержимого

Каким образом можно проверить, какое точное правило заставило Safari прекратить обработку всех правил блокировки контента?

ответ

1

У меня была такая же проблема, и, наконец, Safari печатает журналы Content Blocker с момента выпуска OSX 10.11.1 beta 3. Итак, если вы уже обновлены до этой или более новой версии OSX, вы должны уметь видеть, что блокиратор контента предотвращает что-то от отображения в Safari's Console.

К сожалению, он не печатает, какое именно правило срабатывает. Итак, я написал простую функцию, которая принимает файл и URL-адрес Content Blocker JSON и обнаруживает, что какие-либо правила блокируют этот 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); 
     } 
    } 
} 
Смежные вопросы