технарь |
Отправлено: 1 октября 2018 — 00:46 • Тема: Проверка отправки письма на почту кнопкой под сообщением • Форум: Ошибки и их устранение |
Ответов: 1 Просмотров: 3008
|
При нажатии на кнопку вызывается функция mailto
Цитата: Создание ссылки на адрес электронной почты делается почти также как и ссылка на веб-страницу. Только вместо URL указывается mailto:адрес электронной почты.
В атрибуте href тега <a> вначале пишется ключевое слово mailto, затем через двоеточие желаемый почтовый адрес. Подобная ссылка ничем не отличается от ссылки на веб-страницу, но при нажатии на нее запускается почтовая программа, установленная по умолчанию. Поэтому в названии ссылки следует указывать, что она имеет отношение к электронной почте, чтобы читатели понимали, к чему приведет нажатие на нее. |
технарь |
Отправлено: 29 сентября 2018 — 13:38 • Тема: Проектирование электронных устройств • Форум: Ремонт электроники |
Ответов: 1 Просмотров: 1056
|
Разводка печатных плат для улучшения ЭМС
Аннотация
В последнее время возрастает значимость электро-магнитной совместимости (ЭМС) электронных схем и устройств, что повышает требования к электромагнитным свойствам оборудования. Интерес представляют два аспекта: способность схемы генерировать низкоуровневые помехи (или полное отсутствие таковых) и невосприимчивость схемы к внешним электромагнитным воздействиям.
Явления в электронных схемах и устройст-вах достаточно хорошо и полно описаны в соответствующей литературе, однако поведению схемы и помехам уделяется недостаточное внимание. В этой статье приведены важные критерии, определяющие электромагнитную совместимость схем и, таким образом, предоставляющие инженерам-разработчикам необходи-мую информацию для дизайна схем, а также компоновки и разводки печатных плат.
Введение
ЭМС электронной схемы определяется, главным образом, тем, как компоненты расположены друг относительно друга и как выполнены электрические соединения между самими компонентами. Каждый ток, протекающий по проводнику, порождает обратный ток такой же величины, протекающий по соответствующему проводнику.
Создающаяся при этом петля представляет собой антенну, которая может излучать электромагнитную энергию с величиной, определяющейся амплитудой тока, периодом повторения сигнала и геометрическими размерами токовой петли. На рисунке 1 показаны пути токов для типовой схемы.
Рис 1. Пути токов электронной схемы
Проводники, в различной степени способствующие генерации нежелательного излучения, разделены на следующие категории:
1) Шины питания создают петли A-C-D-B и A-E-F-B. По этим шинам передается энергия, необходимая для работы схемы. Поскольку потребляемая мощность не является постоянной величиной, а зависит от состояний компонентов в определенный момент времени, все частотные составляющие, создающиеся этими компонентами, будут представлены на шинах питания. Из-за относительно высокого импеданса шин питания (обычно около 100 Ом) быстрые изменения токов не могут быть подавлены низким выходным сопротивлением источника питания, поэтому данная функция возлагается на раздели-тельный (развязывающий) конденсатор CB.
2) Добавочные петли формируются сигнальными проводниками L-M-F-D и N-Q-P-F. Площади, создаваемые внутри этих петель, обычно малы, если сигналы располагаются внутри устройства. Однако, по таким проводникам часто передаются высокочастотные сигналы, поэтому эти шины необходимо также принимать во внимание.
3) Схема генератора со своими компонентами создает петлю G-H-J-K. Поскольку в этой части схемы обычно присутствуют высокочастотые сигналы, ей должно быть уделено особое внимание, чтобы не допустить появления дополнительного излучения, а размещение компонентов и разводка проводников должны осуществляться так, чтобы минимизировать эффективные площади излучающих антенн.
Поведение цифровых схем
Понимание взаимосвязи между отдельными характеристиками логических схем позволяет находить эффективные пути улучшения ЭМС. На примере каскада КМОП интегральной схемы можно объяснить некоторые эффекты, возникающие в устройствах, выполненных и по другой технологии.
На рисунке 2 показана схема простейшего инвертора на n- и p-канальных комплементарных транзисторах. Если напряжение VI, подаваемое на вход схемы, меньше порогового напряжения (VIT-) n-канального транзистора, то этот транзистор будет находиться в запертом состоянии.
В то же самое время, p-канальный транзистор будет открыт. В другом случае, при входном напряжении VI>(VCC-VIT+), где VIT+ - пороговое напряжение p-канального транзистора, ситуация поменяется на обратную - p-канальный транзистор будет заперт, а n-канальный открыт. И в том, и в другом состоянии схемы ток через транзисторы протекать не будет (исключая ток утечки). Таким образом объясняется причина чрезвычайно малого потребляемого тока КМОП схемы, находящейся в состоянии покоя и работающей при отсутствии активной нагрузки.
Рис.2. Схема КМОП-инвертора
Однако, если величина входного напряжения находится между двумя значениями (VIT и VCC-VIT), то оба транзистора будут находиться в более или менее открытом состоянии.
Это приводит к существенному увеличению тока питания (рис. 3), т.е. появляется сквозной ток. В КМОП-структурах с высокой плотностью компоновки (HCMOS) этот ток может достигать 1 мА, а в так называемых улучшенных КМОП-структурах (advanced CMOS, AC) - даже превосходить 5 мА.
Рис. 3. Ток потребления КМОП-схемы
Поскольку изменение входного напряжения в рассматриваемой схеме не может происходить мгновенно, то в течение времени изменения в токе питания будут присутствовать кратковременные выбросы, величиной которых пренебрегать нельзя.
Рассмотренное выше (рис. 3) относится к входным каскадам КМОП интегральной схемы. Значительно более критически это явление проявляет себя в выходных каскадах. Поскольку они управляют нагрузкой, то размеры выходных транзисторов значительно больше размеров транзисторов входных каскадов. Результатом этого является существенное увеличение сквозного тока от 20 до 60 мА для рассмотренных структур при длительности токовых выбросов от 5 до 10 нс.
Подавление помех на шинах питания
Токовые выбросы, упомянутые ранее, являются одним из наиболее значимых факторов, определяющих электромагнитную помеховую обстановку. Каждый раз, когда выходной каскад переключается из одного состояния в другое, по шинам питания протекает импульсный ток. Проблема обостряется, когда переключения происходят на высокой частоте, например, в проводниках, связывающих процессор с микросхемами быстродействующей памяти.
На практике подавление помех на шинах питания рекомендуется производить включением рядом с интегральной схемой развязывающего керамического конденсатора CB емкостью 100 нФ (рис. 1). Такой способ подавления помех является эффективным в цифровых системах. Тем не менее, он будет приводить лишь к незначительному уменьшению электромагнитных помех.
Для достижения значительных улучшений в первую очередь необходимо проанализировать полную схему с паразитными компонентами (рис. 4). Два транзистора (Q1 и Q2) представляют собой выходной каскад интегральной схемы. Их подключение к соседним компонентам осуществляется через цепи LP/RP/CP, представляющие паразитные компоненты выводов корпуса:
- LP - индуктивность вывода от 5 до 30 нГн,
- CP - емкость вывода от 1,5 пФ до 3 пФ,
- RP - омическое сопротивление вывода 0,1 Ом.
Рис. 4. Схема с паразитными компонентами
Выводы питания VCC и GND подсоединяются к конденсатору CB и источнику постоянного напряжения (рис. 1). Следующие значения характеризуют импеданс шины питания VCC от источника напряжения до вывода микросхемы:
- L' - индуктивность на единицу длины 5 нГн/см,
- C' - емкость на единицу длины 0,8 пФ/см,
- R' - сопротивление на единицу длины 0,01 Ом/см.
Далее проводник шины питания подходит к первому развязывающему конденсатору CB (рис. 4, компоненты Lb, Rb и Cb в правой части схемы):
- Cb - типовое значение емкости 100 нФ,
- Lb - индуктивность вывода SMD-корпуса 2 нГн,
- Rb - сопротивление потерь 0,2 Ом.
Затем проводник питания (длина 5 см) подходит к второму развязывающему конденсатору CB (рис. 4, компоненты Lb, Rb и Cb в центральной части схемы). Эквивалентная схема этих компонентов (проводника и конденсатора) аналогична рассмотренным ранее.
Для простоты, примем следующие номиналы компонентов для эквивалентной схемы источника питания:
- Ln - индуктивность 5 мкГн,
- Cn - емкость 0,1 мкФ,
- Rn - выходное сопротивление 50 Ом.
Поведение этой схемы было промоделировано SPICE-программой. При этом было допущено, что выход схемы не был нагружен. На рисунке 5 приведены результаты моделирования в виде временных диаграмм со следующими обозначениями:
- ICC - ток питания интегральной схемы (вывод VCC),
- IC1 - ток, протекающий через первый развязывающий конденсатор,
- IC2 - ток, протекающий через второй развязывающий конденсатор.
Рис. 5. Токи шины питания
Как видно на временной диаграмме ток ICC содержит выброс амплитудой около 15 мА. Исходя из предыдущих рассуждений, это может быть обусловлено тем, что развязывающий конденсатор лишь отчасти способен сглаживать импульсы тока. Фактически, резонансная схема, образованная индуктивностью проводника и конденсатором CB, будет возбуждаться, что приведет к увеличению тока IC1. Основная часть тока IC2 передается шиной питания и протекает с небольшим уменьшением амплитуды через второй конденсатор CB.
С точки зрения электромагнитной совместимости схемы, конденсатор CB не способен существенно уменьшить излучаемые помехи. Длинные проводники питания, которые на практике присутствуют во многих случаях, создают относительно большие площади петель, являющиеся эффективными антеннами. Импульсные токи, протекающие по этим проводникам, создают неприемлемо высокий уровень излучения.
Улучшения поведения схемы можно добиться при ограничении протяженности проводников с токами, показанными на рисунке 5. Это не может быть достигнуто при использовании только конденсатора CB. Из-за существующей индуктивности, больших размеров корпуса ИС и большой длины проводников между выводами ИС и конденсатора CB подключение нескольких дополнительных конденсаторов с разными значениями емкости параллельно может не дать существенного улучшения.
Больший интерес представляет предотвращение влияния других частей схемы, которое может быть уменьшено включением индуктивности после первого конденсатора CB, которая представляет достаточно большое сопротивление на высоких частотах. К моделируемой схеме была добавлена индуктивность LCH велиной 1 мкГн, импеданс которой был ограничен на высоких частотах подключением параллельно ей резистора 50 Ом.
Результаты моделирования приведены на рисунке 6. Как и ожидалось, выбросы токов, втекающих в ИС (ICC) и первый конденсатор CB (IC1) не стали меньше. Тем не менее, уменьшение выбросов тока ICH после введенной индуктивности составляет более 20 дБ. Этот метод может способствовать значительному снижению паразитного излучения.
Рис. 6. Токи шины питания при использовании индуктивности
Следующий вопрос посвящен правильному размещению отдельных компонентов на печатной плате для максимального подавления помех. На рисунке 7 показан один из правильных вариантов. Заземленная область (полигон) под интегральной схемой подключена к выводу GND ИС. Эта область обеспечивает распределение основной части линий поля, выходящих из ИС, между корпусом микросхемы и земляной областью. Более того, индуктивность большой поверхности очень мала, что чрезвычайно важно для проводника, соединяющего вывод GND микросхемы с соответствующим выводом конденсатора.
Несущественно, где расположен развязывающий конденсатор - у вывода питания микросхемы VCC или у ее общего вывода GND. Важно лишь то, чтобы паразитные индуктивности и эффективные площади антенн, образующихся при соединениях, были как можно более малыми. Индуктивность LCH, напротив, должна располагаться настолько близко к соответстующей части схемы, насколько это возможно.
Рис. 7. Расположение ИС, CB и LCH. Подавление помех на шинах питания
На рисунке 8 показаны пути токов схемы при подаче на вход импульсного сигнала при нагрузке на линию с импедансом Z. Входной импеданс схемы формируется входной емкостью ИС CIN (5 пФ) и входным сопротивлением RIN (от нескольких килоом до нескольких мегом). При поступлении отрицательного фронта входного сигнала ток будет протекать с выхода драйвера на сток транзистора и со стока через общий провод возвратится к источнику сигнала.
То есть емкость подключенного проводника и входная емкость приемника перезаряжаются через выходное сопротивление драйвера. При поступлении положительного фронта сигнала эта емкость перезаряжается источником питания через выходное сопротивление драйвера. В этом случае, сигнальные токи также проявляются на проводниках питания.
Рис. 8. Сигнальные и возвратные токи
На рисунке 9 приведены результаты моделирования схемы, приведенной на рисунке 8. Предполагалось, что выход ИС был нагружен через проводник длиной 5 см (характеристическое сопро-тивление ZO=100 Ом) на параллельное соединение резистора 100 кОм и емкость 5 пФ.
Следствием большей емкостной нагрузки является существенное уменьшение выбросов тока ICC при отрицательных фронтах выходного напряжения VOUT. Емкостная нагрузка на выходе в течение небольшого промежутка времени поддерживает в этой точке исходный (высокий) потенциал и препятствует протеканию тока через верхний (по схеме) транзистор. При положительных фронтах сигнальный ток IOUT вносит свою добавку в ток питания ICC.
Рис. 9. Токи в сигнальных проводниках и шинах питания
Токи могут быть уменьшены включением последовательно с выходом резистора RS. Теория линий передачи утверждает, что этот резистор не оказывает негативного влияния на скоростные характеристики схемы при условии, что выходное сопротивление драйвера (сумма величин внутреннего сопротивления и резистора RS) меньше или равно характеристическому сопротивлению подключенного проводника (ZO=70...120 Ом). На практике, эти сопротивления имеют номиналы порядка 50 Ом, что приводит к уменьшению амплитуды выбросов токов примерно на 3 дБ. Такое решение требует большего количество компонентов и может использоваться только в том случае, когда искажения, связанные с отражениями сигнала в проводнике, могут быть устранены.
Особое внимание должно быть уделено наибольшему снижению эффективности излучения возможных антенн, т.е. уменьшению длины сигнальных проводников и проводников возвратных токов. Действен-ным методом является параллельное размещение этих проводников (рис. 10). Это получается автоматически при использовании многослойной печатной платы, одним из внутренних слоев которой служит земляной полигон, располагающийся под сигнальными проводниками. Такой метод часто используется, если по проводникам транслируются высокочастотные сигналы (например, тактовые) или длина проводников велика. В этом случае, проводники обладают определенным импедансом, который к тому же поддерживается постоянным на всем протяжении. Кроме того, перекрестные помехи критичных сигналов могут быть уменьшены при соответствующей разводке дополнительных земляных проводников.
Рис. 10. Пример разводки сигнальных и земляных проводников
Наиболее выгодным и технически эффективным методом является уменьшение длины проводников следующих критичных сигналов (по уменьшению приоритета):
1. цепи тактовых частот;
2. адресные шины младших разрядов между процессором и памятью;
3. шины данных между процессором и памятью.
Все интегральные микросхемы, между которыми передаются данные на высокой частоте, должны быть размещены настолько близко друг к другу, насколько это возможно, что позволит уменьшить длину соедини-тельных проводников. Это относится особым образом к шинам между микропроцессором и его памятью.
Следующим шагом является наибольшее уменьшение площадей вероятных антенн, т.е. уменьшение расстояний между проводниками, передающими сигналы, и проводниками их возвратных токов.
Генератор
Самые высокие частоты в цифровых системах обычно присутствуют в генераторе. Выходной сигнал генератора передается к другим частям схемы, где обычно производится деление частоты.
Часто усилитель генератора встраивается в микроконтроллеры и процессоры, и только пассивные компоненты (кварцевый резонатор и конденсаторы) располагаются извне (рис. 11).
Рис. 11. Схема кварцевого генератора
Схема кварцевого генератора должна быть проанализирована с учетом протекания значимых токов для определения, где необходимо подавление помех. Схема параллельного резонанса сформирована кварцевым резонатором X и двумя конденсаторами C (дельта-контур). Поведение резонатора сходно с поведением индуктивности; резонансная частота схемы очень близка к собственной резонансной частоте кристалла. Импеданс дельта-контура, измеренный на входе или выходе, обычно составляет несколько десятков кОм из-за высокой добротности резонатора. Если значения компонентов выбраны правильно, то, вследствие высокого импеданса контура, ток между усилителем и внешними компонентами IO будет весьма мал. Тем не менее, существует обратный эффект, связанный с тем, что выходной импеданс МОП-драйвера не соответствует импедансу резонатора. Кроме того, схема генерирует сигнал прямоугольной формы с множеством гармонических составляющих, для которых сопротивление дельта-контура уже не столь велико. В результате, в схеме драйвера присутствуют большие выходные токи.
Для улучшения схемы обычно последовательно с выходом драйвера подключается резистор RS (рис. 11). В идеальном случае, форма напряжения на входе резонансной схемы должна быть синусоидальной. Когда выход МОП-драйвера согласованно нагружен, то протекающий ток II будет очень небольшим.
Конденсатор C (рис. 11) на резонансной частоте обладает импедансом всего лишь несколько сотен ом. Следовательно, ток IS, протекающий в резонансной цепи, будет значительно большим, чем ток в проводнике, соединяющим резонансный контур со схемой. Поэтому петле из резонатора и конденсаторов должно быть уделено особое внимание, размещение компонентов должно быть компактным, а соединительные проводники - чрезвычайно короткими.
На рисунке 12 показано, как это может быть сделано. Два конденсатора C резонансной схемы располагаются непосредственно рядом с кварцевым резонатором X. Кроме того, эти компоненты должны размещаться максимально близко с соответствующими выводами микросхемы.
Рис. 12. Пример разводки генератора
Часть схемы с кварцевым резонатором и конденсаторами, а также излучаемые ими помехи должны в значительной степени находиться под контролем разработчика.
Не менее важно, чтобы соединение драйвера с общим проводом (землей) находилось вблизи с ИС, т.е. рядом с местоположением выводов драйвера, если это возможно. Это гарантирует малые площади неизбежных петель при относительно длинных соединениях в корпусе интегральной схемы.
Заключение
Реализация ЭМС устройств начинается в первую очередь с разработки схем и выбора компонентов. Неправильные решения на ранних стадиях разработки часто могут быть скорректированы позднее лишь со значительными затратами времени и сил. Понимание принципов работы схемы абсолютно необходимо для выполнения требований электромагнитной совместимости. Одним из основных условий этого является уменьшение эффективных площадей антенн. Например, совершенно недостаточно иметь короткими только сигнальные проводники; проводники их возвратных токов также должны быть короткими.
Зачастую автоматическая расстановка и разводка не позволяют достичь приемлемых результатов с точки зрения электромагнитной совместимости. Поэтому вся ответственность в принятии решений по размещению критичных компонентов и разводке их соединительных проводников полностью ложится на разработчика. В этом случае CAD-пакет может использоваться лишь в качестве разумного инструмента рисования. |
технарь |
Отправлено: 29 сентября 2018 — 13:20 • Тема: Проектирование электронных устройств • Форум: Ремонт электроники |
Ответов: 1 Просмотров: 1056
|
Уменьшение электромагнитных помех
Решение всех проблем, связанных с целостностью сигналов, еще не гарантирует того, что изделие будет полностью отвечать условиям электромагнитной совместимости.
Пока справедливо, что дифференциальные токи ассоциируются с сигналами, а пути их возвратных токов вызывают излучение, синфазные токи, протекающие по проводникам и полигонам плат и по внешним кабелям, представляют значительно более мощные источники излучения. Эти проводники выглядят как антенны-диполи.
Изменение потенциала полигона земли, связанное с протеканием синфазных токов, приводит к нестабильности потенциала. Даже если эта нестабильность и не приводит к возникновению проблем с целостностью сигналов, она может служить причиной возникновения повышенного излучения. например, если изменение потенциала земли составляет 100 мВ и имеется 10-см кабель подключенный своей оплеткой к этой земле, то излучение составит 400 мкВ/м на расстоянии 3 м.
Первым важным шагом уменьшения излучения является уменьшение нестабильности потенциала земли, возникающего между двумя различными точками пути возвратного тока. Изменение потенциала всегда связано с тем, что проводник возвратного тока (как, впрочем, и любой другой проводник) представляет собой индуктивность; ее уменьшение ведет к уменьшению дрожания потенциалов.
Существует пять способов уменьшения дрожания потенциала земли и снижения излучения:
1. Используйте дифференциальную передачу сигналов везде, где это возможно. Это может уменьшить распределение токов питания и возвратных токов.
2. Используйте симметричную разводку проводников возвратных токов вокруг сигнального пути. Дрожание потенциала не должно присутствовать на оплетке коаксиального кабеля. Линии магнитного поля снаружи кабеля, наведенные сигнальным током, имеют точно такое же распределение, но противоположны по направлению, что и линии магнитного поля, наведенные возвратным током. Эти два поля компенсируют друг друга. Поэтому вокруг коаксиального кабеля магнитное поле отсутствует, нет индуктивной связи и нет дрожания. Обычно не практикуется использование коаксиальных кабелей непосредственно на печатных платах, а взамен применяются полосковые линии передачи (stripline topology). Несимметричные (микрополосковые) линии (microstrip topology) обладают значительно большей собственной индуктивностью, чем полосковые.
3. Создавайте проводник возвратного тока настолько широким, насколько это возможно. Общая индуктивность возвратного пути уменьшается при уменьшении индуктивностей частей этого пути. Основной способ для реализации этого - делать более широкими отдельные части проводника возвратного тока.
4. Размещайте проводник сигнального тока настолько близко к проводнику возвратного тока, насколько это возможно. Общая индуктивность возвратного пути уменьшится при уменьшении частичной индуктивности между двумя сигнальными путями.
5. Избегайте создавать разрывы в пути возвратного тока (т.е. проводник возвратного тока должен представлять собой единое целое). Избегайте создавать проводники возвратного тока в виде дуг, окружающих части схемы. Приведенные пять подсказок не всегда применимы к каждой разработке, но при следовании им позволят уменьшить излучаемые электромагнитные помехи.
Источник... |
технарь |
Отправлено: 23 сентября 2018 — 15:59 • Тема: Блокировка рекламы в Adblock Plus • Форум: Всё подряд |
Ответов: 1 Просмотров: 1624
|
Для опытов... (Показать)code:<p>Текущие версии Adblock Plus позволяют вам "настраивать" фильтры многими разными способами. Этот документ расскажет о выборе, который у вас есть, и о том, как его использовать.</p>
<p><em>Ответственность</em>: Все примеры фильтров приведённые здесь являются только примерами и не предназначены для использования.</p>
<h2 id="introduction">Введение</h2>
<p>Параметров описанных в этом разделе должно быть достаточно для создания фильтров по мере необходимости.</p>
<h3 id="basic">Основные правила</h3>
<p>Наиболее простой фильтр это адрес баннера, который вы хотите заблокировать. Однако, часто этот адрес изменяется каждый раз при загрузке страницы. Например, он может быть <code>http://example.com/ads/banner123.gif</code> где 123 -случайное число. В этом случае блокирование по адресу вам не поможет, вам нужен более общий фильтр, такой как <code>http://example.com/ads/banner*.gif</code>. Или, может быть, даже <code>http://example.com/ads/*</code>.</p>
<p><em>Примечание</em>: Убедитесь, что вы не обобщили слишком многое. Фильтр <code>http://example.com/*</code> безусловно, заблокирует все баннеры, но также заблокирует всё остальное с example.com то, что вы можете захотеть увидеть.</p>
<h3 id="whitelist">Исключающие правила</h3>
<p>Иногда вы можете заметить, что один из ваших фильтров обычно работающий нормально, блокирует то, что не должно быть блокировано. Вы не хотите удалять этот фильтр, но вы также не хотите, чтобы это продолжалось.</p>
<p>Для этого случая есть исключающие правила - они позволяют вам определить, в каком случае фильтры не должны применяться. Например, если фильтр <code>adv</code> блокирует <code>http://example.com/advice.html</code>, вы можете установить исключающее правило <code>@@advice</code>. Исключающие правила не отличаются правил фильтров, вы можете использовать символы обобщения или регулярные выражения. Только вы должны начинать их с <code>@@</code>, указывающее на исключающее правило.</p>
<p>Exception rules can do more. If you specify <code>$document</code> option you will get an exception for the entire page. For example, if your exception rule is <code>@@||example.com^$document</code> and you open some page from example.com — Adblock Plus will be entirely disabled on this page and nothing will be blocked.</p>
<h3 id="anchors">Соответствие началу/концу адреса</h3>
<p>Обычно Adblock Plus обрабатывает каждый фильтр так,как если бы он имел обобщения в начале и в конце. Например, нет разницы между фильтрами <code>ad</code> и <code>*ad*</code>.Обычно это не является проблемой, но иногда вы можете захотеть, чтобы ваш фильтр соответствовал в начале или в конце адресов. Например, вы можете захотеть заблокировать весь Flash, но если вы добавите фильтр <code>swf</code> , адрес <code>http://example.com/swf/index.html</code> также будет заблокирован.</p>
<p>Решение проблемы: добавьте к фильтру символ |, чтобы показать, что конец адреса находится в этой точке. Например, фильтр <code>swf|</code> будет блокировать <code>http://example.com/annoyingflash.swf</code> , но не <code>http://example.com/swf/index.html</code>. А фильтр <code>|http://baddomain.example/</code> будет блокировать <code>http://baddomain.example/banner.gif</code> , но не <code>http://gooddomain.example/analyze?http://baddomain.example</code>.</p>
<p id="flexible-anchors">Иногда хочется заблокировать <code>http://example.com/banner.gif</code> вместе с <code>https://example.com/banner.gif</code> и <code>http://www.example.com/banner.gif</code>. Этого можно достичь добавлением пары символов | в начало фильтра соответствующего началу доменного имени: <code>||example.com/banner.gif</code> заблокирует все эти адреса и не тронет <code>http://badexample.com/banner.gif</code> или <code>http://gooddomain.example/analyze?http://example.com/banner.gif</code> (необходим Adblock Plus 1.1 и выше).</p>
<h3 id="separators">Разделительные символы</h3>
<p>Часто вам нужно будет применить в фильтре любой разделительный символ. Например, вы можете написать фильтр, который блокирует <code>http://example.com/</code> и <code>http://example.com:8000/</code> , но не <code>http://example.com.ar/</code>. Здесь символ ^ может быть использован как указатель для одного разделительного символа: <code>http://example.com^</code> (необходим Adblock Plus 1.1 и выше).</p>
<p>Разделителем может быть любой символ кроме буквы, цифры и следующих символов: _ - . %. К концу адреса также применим разделитель. В следующем примере все разделители показаны красным: http:<b style="color: red;">//</b>example.com<b style="color: red;">:</b>8000<b style="color: red;">/</b>foo.bar<b style="color: red;">?</b>a<b style="color: red;">=</b>12<b style="color: red;">&</b>b<b style="color: red;">=</b>%D1%82%D0%B5%D1%81%D1%82. Также этот адрес может быть блокирован фильтром <code>^example.com^</code> или <code>^%D1%82%D0%B5%D1%81%D1%82^</code> или <code>^foo.bar^</code>.</p>
<h3 id="comments">Комментарии</h3>
<p>Любое правило, начинающееся с восклицательного знака содержит комментарий. Оно отображается в списке фильтров серым цветом. Adblock Plus будет игнорировать это правило при блокировании, так что можете спокойно писать там всё, что хотите. Вы можете расположить комментарий выше реального фильтра, чтобы описать для чего он нужен. Или вы можете разместить комментарий с указанием вашего авторства вверху списка фильтров (так делают большинство авторов).</p>
<h4 id="special-comments">Special comments</h4>
<p>
Special comments will only have an effect in downloaded filter lists, not in custom filters.
Special comments must be given at the top of the filter list right below the header.
They can set a number of parameters for the filter list:
</p>
<ul>
<li>
<p>
<code>! Homepage: http://example.com/</code>
</p>
<p>
This comment determines which webpage should be linked as filter list homepage.
</p>
</li>
<li>
<p>
<code>! Title: FooList</code>
</p>
<p>
This comment sets a fixed title for the filter list. If this comment is present the user will no longer be able to change
the title.
</p>
</li>
<li>
<p>
<code>! Expires: 5 days</code>
</p>
<p>
This comment sets the update interval for the filter list, the value can be given in days (e.g. <code>5 days</code>) or hours
(e.g. <code>8 hours</code>). Any value between 1 hour and 14 days is possible. Note that the update
will not necessarily happen after this time interval. The actual update time is slightly randomized and depends on
some additional factors to reduce server load.
</p>
</li>
<li>
<p>
<code>! Redirect: http://example.com/list.txt</code>
</p>
<p>
This comment indicates that the filter list has moved to a new download address. Adblock Plus will ignore any file
contents beyond that comment and immediately try downloading from the new address. In case of success the address
of the filter list will be updated in the settings. This comment is ignored if the new address is the same as the
current address, meaning that it can be used to enforce the "canonical" address of the filter list.
</p>
</li>
<li>
<p>
<code>! Version: 1234</code>
</p>
<p>
This comment defines a numerical version of the filter list. This version number will be displayed in issue reports
and can be used to verify that the report refers to the current version of the filter list.
</p>
</li>
</ul>
<h3 id="advanced">Расширенные возможности</h3>
<p>Возможности, описанные в этом разделе, обычно используются опытными пользователями или создателями подписок. Вы можете пропустить его.</p>
<h4 id="options">Специфические опции фильтра</h4>
<p>Adblock Plus позволяет вам определить число параметров, изменяющих поведение фильтра. Список этих параметров располагается в конце фильтра после знака доллара ($) и разделяется запятыми, например:</p>
<pre>
*/ads/*$script,match-case
</pre>
<p>Здесь <code>*/ads/*</code> текущий фильтр <code>script</code> и <code>match-case</code> его параметры. В настоящее время поддерживаются следующие параметры:</p>
<ul>
<li>Типы параметров: определяют, какие типы элементов могут быть заблокированы фильтром (или пропущены в случае исключающего правила). Составной тип параметров, может быть определен, чтобы показать, что фильтр может быть применен к нескольким типам элементов. Доступные типы:
<ul>
<li><code>script</code> — внешние файлы скриптов загруженные через HTML-тэг SCRIPT</li>
<li><code>image</code> — обычные изображения, загруженные через HTML-тэг IMG</li>
<li><code>stylesheet</code> — внешние CSS-файлы стилей</li>
<li><code>object</code> — содержимое, управляемое плагинами браузера, напр. Flash или Java</li>
<li><code>xmlhttprequest</code> — requests started using the <a href="https://xhr.spec.whatwg.org/"><code>XMLHttpRequest</code> object</a> or <a href="https://fetch.spec.whatwg.org/"><code>fetch()</code> API</a></li>
<li><code>object-subrequest</code> — запросы инициированные плагинами вроде Flash</li>
<li><code>subdocument</code> — встроенные страницы, обычно при помощи HTML-фреймов</li>
<li><code>ping</code> — requests started by <a href="https://developer.mozilla.org/docs/Web/HTML/Element/a#attr-ping"><code><a ping></code></a> or <a href="https://developer.mozilla.org/docs/Web/API/Navigator/sendBeacon"><code>navigator.sendBeacon()</code></a> (Adblock Plus 2.7.1 or higher required)</li>
<li><code>websocket</code> — requests initiated via <a href="https://developer.mozilla.org/docs/Web/API/WebSocket"><code>WebSocket</code> object</a> (Adblock Plus 2.8 or higher required)</li>
<li><code>webrtc</code> — connections opened via <a href="https://developer.mozilla.org/docs/Web/API/RTCPeerConnection"><code>RTCPeerConnection</code> instances</a> to ICE servers (Adblock Plus 1.13.3 for Chrome and Opera, 3.0 for Firefox, or higher required)</li>
<li><code>document</code> — сама страница (только <a href="#whitelist">исключающие правила</a> могут быть применены к этой странице)</li>
<li><code>elemhide</code> — только для исключающих правил, схоже с <code>document</code> но отключает только <a href="#elemhide">правила скрытия элементов</a>, а не все правила фильтрации на странице (требуется Adblock Plus 1.2 и выше)</li>
<li><code>generichide</code> — for exception rules only, similar to <code>elemhide</code> but only disables <a href="#generic-specific">generic</a> element hiding rules on the page (Adblock Plus 2.6.12 or higher required)</li>
<li><code>genericblock</code> — for exception rules only, just like <code>generichide</code> but disables <a href="#generic-specific">generic</a> blocking rules (Adblock Plus 2.6.12 or higher required)</li>
<li><code>popup</code> — pages opened in a new tab or window</li>
<li><code>other</code> — типы запросов не перечисленные выше</li>
</ul>
The type options <code>background</code>,
<code>xbl</code> and <code>dtd</code> are outdated
and should no longer be used.
</li>
<li>Обратные типы параметров: определяет типы элементов, фильтр к которым применяться <strong>не</strong> должен. Доступные параметры обратных типов: <code>~script</code>, <code>~image</code>, <code>~stylesheet</code>, <code>~object</code>, <code>~xmlhttprequest</code>, <code>~object-subrequest</code>, <code>~subdocument</code>, <code>~document</code>, <code>~elemhide</code>, <code>~other</code></li>
<li>Ограничение на сторонние/собственные запросы: Если указана опция <code>third-party</code>, то фильтр применяется лишь к запросам ресурсов из внешних источников. Аналогично, <code>~third-party</code> ограничивает фильтр запросами из того-же источника, что и открытая страница.</li>
<li>Ограничители доменов: Параметр <code>domain=example.com</code> означает, что фильтр должен быть применён только на страницах домена "example.com". Множество доменов можно установить, используя "|" как разделитель: с параметром <code>domain=example.com|example.net</code> фильтр будет применён только на страницах доменов "example.com" или "example.net". Если доменное имя начинается с "~", фильтр <strong>не</strong> должен применяться на страницах этого домена. Например, <code>domain=~example.com</code> показывает, что фильтр должен применяться на страницах любого домена, но "example.com" и <code>domain=example.com|~foo.example.com</code> ограничивает фильтр доменом "example.com" исключая поддомен "foo.example.com".</li>
<li>
Sitekey restrictions: The option <code>sitekey=abcdsitekeydcba</code> means that the filter should only be applied on pages that provide a public key and a signature which can be verified by that very same public key that is also contained in the filter (but without the trailing =). Multiple sitekeys can be specified using "|" as separator: with the option <code>sitekey=abcdsitekeydcba|bcdesitekeyedcb</code> the filter will only be applied on pages providing either sitekey "abcdsitekeydcba" or "bcdesitekeyedcb". This is similar to domain restrictions but allows covering scenarios where a single filter should apply to a very large number of domains. Note that sitekey restrictions require <a href="#sitekey_server">modifications on the server-side</a>.
</li>
<li>
Content Security Policies: The option <code>csp=script-src: 'none'</code> causes a Content Security Policy header of <code>script-src: 'none'</code> to be injected into HTTP responses for requested documents matching the filter — assuming that exception rules with the same option don't also match and that the document isn’t whitelisted. The Content Security Policy <code>script-src: 'none'</code> would in turn block all scripts — including inline — for the document. This filter option should generally be avoided, except as a last resort to counter advanced circumvention. (Adblock Plus 3.1 or higher required.)
</li>
<li><code>match-case</code> — определяет фильтр, который применяется только к адресам с совпадением букв, например фильтр <code>*/BannerAd.gif$match-case</code> будет блокировать <code>http://example.com/BannerAd.gif</code>, но не <code>http://example.com/bannerad.gif</code>.</li>
<li><code>collapse</code> — эта опция принудительно включает скрытие для данного элемента не смотря на значение глобальной настройки «Прятать метки на месте заблокированных элементов». Соответственно опция <code>~collapse</code> выключает скрытие свободного места от данного элемента.</li>
<li>
<code>donottrack</code> — для каждого адреса, который подходит под правило блокирования с этим параметром и не соответствует никаким исключающим правилам с этим параметром, Adblock Plus будет посылать <a href="http://donottrack.us/">заголовок Do-Not-Track</a> (необходим Adblock Plus 1.3.5 или выше). Для обратной совместимости рекомендуется использовать этот параметр с противоречивыми параметрами типа. Это гарантирует, что в старых версиях Adblock Plus этот фильтр ничего не заблокирует: <code>*$donottrack,image,~image</code>
</li>
<li>
Rewrite the URL with the option <code>rewrite=</code>. You may want to create a regular expression filter to perform the rewrite operation. In that case, you can use <code>$n</code> in the rewrite argument, with <code>n</code> being a number between 1 and 100, to insert the n-th parenthesis submatch of the filter regular expression. Anything not explicitly matched by it will be added in the rewritten string. For example <code>/(server\.com\/assets\/file.php)\?.*$/$rewrite=$1</code> will strip everything that comes after ".php" and redirects the request to the resulting URL. If there is no query string (i.e. no '?'), this filter won't match. The rewrite parameter has the same syntax as JavaScript’s <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter"><code>String.prototype.replace()</code></a>. The resulting URL must have the same origin; in case it is rewritten to a relative URL, the origin gets added back. Also, rewrite for scripts, subdocuments, objects, requests from within objects (like Flash) are not possible for security reason; even if explicitly stated by the filter. If both, a filter with/without <code>$rewrite</code> option matches, the behavior is undefined, i.e. the request might either be blocked or redirected. (Adblock Plus 3.2 or higher required.)
</li>
</ul>
<h4 id="regexps">Использование регулярных выражений</h4>
<p>Если желаете добиться большего контроля над тем, к чему ваши фильтры подходят, а к чему нет, то можете использовать регулярные выражения. Например, фильтр <code>/banner\d+/</code> подойдёт к <code>banner123</code> и <code>banner321</code> , но не <code>banners</code>. Изучите <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions#Writing_a_Regular_Expression_Pattern">документацию по регулярным выражениям</a> и сможете составлять их сами.</p>
<p><em>Примечание</em>: Для повышения производительности рекомендуется не использовать регулярные выражения, если этого можно избежать.</p>
<h2 id="elemhide">Скрытие элементов</h2>
<h3 id="elemhide_basic">Основные правила</h3>
<p>Иногда вы будете встречать рекламу, которая не может быть заблокирована потому, что она была внедрена как текст в саму веб-страницу. Если вы посмотрите исходный код такой страницы, то найдёте нечто вроде этого:</p>
<pre><div class="textad">
Cheapest tofu, only here and now!
</div>
<div id="sponsorad">
Really cheap tofu, click here!
</div>
<textad>
Only here you get the best tofu!
</textad>
</pre>
<p>Для корректного отображения страницу необходимо полностью, а значит и реклама будет скачана и этого нельзя избежать. Всё, что тут можно сделать - скрыть то, что не желаете видеть. Для этого и применяются правила скрытие элементов.</p>
<p>Первый рекламный слоган выше находится внутри элемента DIV с классом «textad». Следующее правило скроет скроет именно такую комбинацию: <code>##.textad</code>. Тут «##» является признаком правила скрытия, а остальное — селектором, определяющим скрываемый элемент. Скрывать элементы по их атрибуту ID можно аналогичным образом, <code>###sponsorad</code> скроет второй слоган. Указывать имя самого элемента не обязательно, фильтр <code>##textad</code> так же будет работать (* тоже не обязательна). Также можно скрывать элементы лишь по их имени. Например, <code>{4}</code> скроет третий рекламный слоган.</p>
<p>Расширение <a href="/ru/elemhidehelper" hreflang="ru">Element Hiding Helper</a> поможет в выборе нужного элемента и написании соответствующего правила без изучения исходного кода страницы. Базовые знания в HTML желательны в любом случае.</p>
<p><em>Примечание</em>: Правила скрытие кардинально отличается от обычных фильтров. Например, не поддерживаются привычные символы масок — они имеют другое значение и применение.</p>
<h3 id="elemhide_domains">Ограничение правил определенными доменами</h3>
<p>Обычно вы хотите скрыть определенную рекламу на определенном сайте и не хотите, чтобы это правило применялось на других сайтах. Например, правило <code>##.sponsor</code> может скрыть полезный код на некоторых сайтах. Но если вы напишете его как <code>example.com##.sponsor</code> оно будет применено на <code>http://example.com/</code> и <code>http://something.example.com/</code> но не на <code>http://example.org/</code>. Вы также можете определить множество доменов - просто разделите их запятыми: <code>domain1.example,domain2.example,domain3.example##.sponsor</code>.</p>
<p>Если доменному имени предшествует "~", правило <strong>не</strong> будет применяться на страницах этого домена (требуется Adblock Plus 1.1 и выше). Например, <code>~example.com##.sponsor</code> будет применяться на страницах с других доменов, "example.com" и <code>example.com,~foo.example.com##.sponsor</code> делает правило применимым к домену "example.com" с исключением поддомена "foo.example.com".</p>
<p><em>Примечание</em>: Из-за способа, который применяется при скрытии элементов, вы можете использовать только полные доменные имена. Нельзя использовать другие части адресов и нельзя использовать <code>domain</code> как замену <code>domain.example,domain.test</code>.</p>
<p><em>Примечание</em>: Правила скрытия элементов с ограничением доменов могут использоваться для скрытия элементов интерфейса браузера. Например, правило <code>browser##menuitem#javascriptConsole</code> скроет пункт Консоль JavaScript в меню Инструменты браузера Firefox.</p>
<h3 id="elemhide_attributes">Селекторы атрибутов</h3>
<p>С некоторыми рекламными вставками справиться не так просто - их рекламный текст не имеет ни id, ни атрибута class. Вы можете использовать другие атрибуты для их скрытия, например <code>##table[width="80%"]</code> будет скрывать таблицы атрибут width у которых установлен в 80%. Если вы не хотите определять полное значение атрибута, <code>##div[title*="adv"]</code> будет скрывать все элементы div с атрибутом заголовка, содержащим строку "adv". Вы также можете проверять начало и конец атрибута, например <code>##div[title^="adv"][title$="ert"]</code> будет скрывать элементы div начинающиеся с "adv" и заканчивающиеся "ert". Как видите, вы также можете использовать множество состояний — <code>table[width="80%"][bgcolor="white"]</code> будет подходить для таблиц с атрибутом width установленным в 80% и атрибутом bgcolor установленным в white.</p>
<h3 id="elemhide_css">Дополнительные селекторы</h3>
<p>В принципе любой CSS селектор моно работающий в Firefox можно использовать для скрытия. Например следующее правило скроет всё, что вложено в элемент DIV с классом «adheader»: <code>##.adheader + *</code>. Полный список CSS селекторов смотрите в <a href="http://www.w3.org/TR/css3-selectors/">спецификации CSS от W3C</a> (учтите: на данный момент Firefox поддерживает ещё не все селекторы). Please keep in mind that browsers are slower to process these selectors than selectors based on <code>class</code> or <code>id</code> attribute only.</p>
<p><em>Примечание</em>: Эта функция для продвинутых пользователей, необходимо свободное владение CSS селекторами, чтоб их корректно использовать. Adblock Plus не способен проверить синтаксис добавляемого селектора и если использовать неправильный синтаксис, то можно сломать другие (корректные) фильтры. Проверяйте консоль ошибок JavaScript на предмет сообщений об ошибках в CSS.</p>
<h3 id="elemhide-emulation">Extended CSS selectors (Adblock Plus specific)</h3>
<p>
Sometimes the standard CSS selectors aren't powerful enough to hide an advertisement. For those cases we have added some new selectors, namely <code>:-abp-has()</code>, <code>:-abp-contains()</code> and <code>:-abp-properties()</code> (requires Adblock Plus 1.13.3 or higher for Chrome and Opera).
</p>
<p>
When writing an element hiding filter that makes use of these extended selectors you must use the <code>#?#</code> syntax, e.g. <code>example.com#?#selector</code>. But it's important to note that doing so carries a performance impact, so do so sparingly and make sure those filters are specific to as few domains and elements as possible.
</p>
<h4>:-abp-properties()</h4>
<p>
<code>:-abp-properties(properties)</code> will select elements based upon stylesheet properties. For example <code>:-abp-properties(width:300px;height:250px;)</code> will select elements that have a corresponding CSS rule in a stylesheet which sets the <code>width</code> and <code>height</code> to the values <code>300px</code> and <code>250px</code> respectively. Property names are matched case-insensitively. Furthermore, wildcards can be used so that <code>:-abp-properties(width:*px;height:250px;)</code> will match any width specified in pixels and a height of 250 pixels.
</p>
<p>
You can also use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">regular expressions</a> by surrounding the properties expression with "/". For example, <code>:-abp-properties(/width:30[2-8]px;height:250px;/)</code> will match widths between 302 and 308 pixels and a height of 250 pixels.
</p>
<p>
<em>Note</em>: The <a href="https://adblockplus.org/development-builds/new-css-property-filter-syntax">older syntax</a> for the CSS property filters is deprecated and will be automatically converted to the new format . The syntax to select the style properties remain the same. For example, <code>[-abp-properties='width:300px;height:250px;']</code> will be converted to <code>:-abp-properties(width:300px;height:250px;)</code>.
</p>
<p>
<code>:-abp-properties()</code> will also select elements using the style properties found in their pseudo-elements, like <code>::before</code> and <code>::after</code>. For example, <code>:-abp-properties(content:'Advertisment')</code> will match elements where the string <em>Advertisment</em> is found in either their <code>::before</code> or <code>::after</code> pseudo element.
</p>
<h4>:-abp-has()</h4>
<p>
<code>:-abp-has(selector)</code> will select elements based on their content. For example <code>:-abp-has(> div > a.advertiser)</code> will select elements that contain as a direct descendant a <code><div></code> that contains an <code><a></code> with the class <code>advertiser</code>. The inner selector can be relative to the element scope, and can use any of the pseudo-selectors, including <code>:-abp-has()</code> and will determine whether the selection will occur.
</p>
<h4>:-abp-contains()</h4>
<p>
<code>:-abp-contains(text)</code> will select elements based on their text content. For example, <code>div.sidebar > span:-abp-contains(Advertisment)</code> will select the <code><span></code> elements within a <code><div></code>, with a class of <code>sidebar</code> that contains the word "Advertisment". In practice, you'd want to combine this with a <code>:-abp-has()</code> to select the outer container — something like <code>div.sidebar > div:-abp-has(span:-abp-contains(Advertisment))</code> to select the container that would contain an advertisement label.
</p>
<h3 id="elemhide_exceptions">Исключения</h3>
<p>
Правила-исключения «выключают» отдельные правила блокировки и скрытия на определённых доменах. В основном они полезны авторам подписок, дополняющих сторонние подписки, которые они не могут изменить. Например, правило <code>##.textad</code> можно выключить на <code>example.com</code> добавив исключение <code>example.com#@#.textad</code>. Комбинация этих двух правил идентична по эффекту одному правилу <code>~example.com##.textad</code>. Применять такие исключения рекомендуется только в случае, когда изменить само правило скрытия не представляется возможным, во всех остальных случаях лучше изменить само правило.
These exceptions will be applied to <a href="#elemhide-emulation">advanced pseudo-selector rules</a> as well.
</p>
<h3 id="generic-specific">Generic / Specific filters</h3>
<p>With the <code>$generichide</code> and <code>$genericblock</code> filter options the distinction between generic and specific filters becomes important.</p>
<p>We classify a filter to be <strong>specific</strong> if it matches one or more domains or matches a sitekey. If a filter has no domains specified (or only domain exceptions) and no sitekey then it counts as <strong>generic</strong>. For example, <code>example.com##.textad</code> is a specific filter, whereas both <code>##.textad</code> and <code>~example.com##.textad</code> are generic.</p>
<p>Note that with blocking rules the domain must be specified under the $domain option for them to be considered specific. For example, <code>||example.com^</code> is considered generic whereas <code>*/ads/*$domain=example.com</code> is site-specific.</p>
<h2 id="sitekey_server">Implementing a sitekey on the server</h2>
<p>
For a <a href="#options">sitekey-restricted filter</a> to apply, a webpage needs to return base64-encoded versions of the public key and a signature which Adblock Plus can validate. Currently, this means including them in both the HTTP response header (<code>X-Adblock-Key: abcdpublickeydcba_abcdsignaturedcba</code>) and the root tag of the document (<code><html data-adblockkey="abcdpublickeydcba_abcdsignaturedcba"></code>).
</p>
<p>
First you need to create a private RSA key (preferably 512 bit to keep the transfer volume low) and then a DER representation of the public key.
</p>
<p>
The data used for creating the signature is a concatenated list of request variables (namely URI, host and user agent) separated by the <code>NUL</code> character "\0". For example:
</p>
<pre>
/index.html?q=foo\0www.example.com\0Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0
</pre>
<p>
Finally, generate the signature for this string by using the signature algorithm SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE (default when using OpenSSL).
</p>
</div> |
технарь |
Отправлено: 23 сентября 2018 — 13:40 • Тема: Блокировка рекламы в Adblock Plus • Форум: Всё подряд |
Ответов: 1 Просмотров: 1624
|
Создание фильтров для Adblock PlusОригинал статьи находится тут.
ВведениеЭтот документ расскажет о возможностях, которые у вас есть, и о том, как их использовать.
Параметров описанных в этом разделе должно быть достаточно для создания пользовательских фильтров в случае такой необходимости.
Внимание: Все примеры фильтров приведённые здесь являются только примерами и не предназначены для непосредственного использования.
Основные правила
Наиболее простой фильтр это адрес баннера, который вы хотите заблокировать. Однако, часто этот адрес изменяется каждый раз при загрузке страницы. Например, он может быть http://example.com/ads/banner123.gif где 123 -случайное число. В этом случае блокирование по адресу вам не поможет, вам нужен более общий фильтр, такой как http://example.com/ads/banner*.gif. Или, может быть, даже http://example.com/ads/*.
Примечание: Убедитесь, что вы не обобщили слишком многое. Фильтр http://example.com/* безусловно, заблокирует все баннеры, но также заблокирует всё остальное с example.com то, что вы можете захотеть увидеть.
Исключающие правила
Иногда вы можете заметить, что один из ваших фильтров обычно работающий нормально, блокирует то, что не должно быть блокировано. Вы не хотите удалять этот фильтр, но вы также не хотите, чтобы это продолжалось.
Для этого случая есть исключающие правила - они позволяют вам определить, в каком случае фильтры не должны применяться. Например, если фильтр adv блокирует http://example.com/advice.html, вы можете установить исключающее правило @@advice. Исключающие правила не отличаются правил фильтров, вы можете использовать символы обобщения или регулярные выражения. Только вы должны начинать их с @@, указывающее на исключающее правило.
Exception rules can do more. If you specify $document option you will get an exception for the entire page. For example, if your exception rule is @@||example.com^$document and you open some page from example.com — Adblock Plus will be entirely disabled on this page and nothing will be blocked.
Соответствие началу/концу адреса
Обычно Adblock Plus обрабатывает каждый фильтр так,как если бы он имел обобщения в начале и в конце. Например, нет разницы между фильтрами ad и *ad*.Обычно это не является проблемой, но иногда вы можете захотеть, чтобы ваш фильтр соответствовал в начале или в конце адресов. Например, вы можете захотеть заблокировать весь Flash, но если вы добавите фильтр swf , адрес http://example.com/swf/index.html также будет заблокирован.
Решение проблемы: добавьте к фильтру символ |, чтобы показать, что конец адреса находится в этой точке. Например, фильтр swf| будет блокировать http://example.com/annoyingflash.swf , но не http://example.com/swf/index.html. А фильтр |http://baddomain.example/ будет блокировать http://baddomain.example/banner.gif , но не http://gooddomain.example/analyze?http://baddomain.example.
Иногда хочется заблокировать http://example.com/banner.gif вместе с https://example.com/banner.gif и http://www.example.com/banner.gif. Этого можно достичь добавлением пары символов | в начало фильтра соответствующего началу доменного имени: ||example.com/banner.gif заблокирует все эти адреса и не тронет http://badexample.com/banner.gif или http://gooddomain.example/analyz...e.com/banner.gif (необходим Adblock Plus 1.1 и выше).
Разделительные символы
Часто вам нужно будет применить в фильтре любой разделительный символ. Например, вы можете написать фильтр, который блокирует http://example.com/ и http://example.com:8000/ , но не http://example.com.ar/. Здесь символ ^ может быть использован как указатель для одного разделительного символа: http://example.com^ (необходим Adblock Plus 1.1 и выше).
Разделителем может быть любой символ кроме буквы, цифры и следующих символов: _ - . %. К концу адреса также применим разделитель. В следующем примере все разделители показаны красным: http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82. Также этот адрес может быть блокирован фильтром ^example.com^ или ^%D1%82%D0%B5%D1%81%D1%82^ или ^foo.bar^.
Комментарии
Любое правило, начинающееся с восклицательного знака содержит комментарий. Оно отображается в списке фильтров серым цветом. Adblock Plus будет игнорировать это правило при блокировании, так что можете спокойно писать там всё, что хотите. Вы можете расположить комментарий выше реального фильтра, чтобы описать для чего он нужен. Или вы можете разместить комментарий с указанием вашего авторства вверху списка фильтров (так делают большинство авторов).
Special comments
Special comments will only have an effect in downloaded filter lists, not in custom filters. Special comments must be given at the top of the filter list right below the header. They can set a number of parameters for the filter list:
! Homepage: http://example.com/
This comment determines which webpage should be linked as filter list homepage.
! Title: FooList
This comment sets a fixed title for the filter list. If this comment is present the user will no longer be able to change the title.
! Expires: 5 days
This comment sets the update interval for the filter list, the value can be given in days (e.g. 5 days) or hours (e.g. 8 hours). Any value between 1 hour and 14 days is possible. Note that the update will not necessarily happen after this time interval. The actual update time is slightly randomized and depends on some additional factors to reduce server load.
! Redirect: http://example.com/list.txt
This comment indicates that the filter list has moved to a new download address. Adblock Plus will ignore any file contents beyond that comment and immediately try downloading from the new address. In case of success the address of the filter list will be updated in the settings. This comment is ignored if the new address is the same as the current address, meaning that it can be used to enforce the "canonical" address of the filter list.
! Version: 1234
This comment defines a numerical version of the filter list. This version number will be displayed in issue reports and can be used to verify that the report refers to the current version of the filter list.
Расширенные возможности
Возможности, описанные в этом разделе, обычно используются опытными пользователями или создателями подписок. Вы можете пропустить его.
Специфические опции фильтра
Adblock Plus позволяет вам определить число параметров, изменяющих поведение фильтра. Список этих параметров располагается в конце фильтра после знака доллара ($) и разделяется запятыми, например:
*/ads/*$script,match-case
Здесь */ads/* текущий фильтр script и match-case его параметры. В настоящее время поддерживаются следующие параметры:
Типы параметров: определяют, какие типы элементов могут быть заблокированы фильтром (или пропущены в случае исключающего правила). Составной тип параметров, может быть определен, чтобы показать, что фильтр может быть применен к нескольким типам элементов. Доступные типы:
script — внешние файлы скриптов загруженные через HTML-тэг SCRIPT
image — обычные изображения, загруженные через HTML-тэг IMG
stylesheet — внешние CSS-файлы стилей
object — содержимое, управляемое плагинами браузера, напр. Flash или Java
xmlhttprequest — requests started using the XMLHttpRequest object or fetch() API
object-subrequest — запросы инициированные плагинами вроде Flash
subdocument — встроенные страницы, обычно при помощи HTML-фреймов
ping — requests started by <a ping> or navigator.sendBeacon() (Adblock Plus 2.7.1 or higher required)
websocket — requests initiated via WebSocket object (Adblock Plus 2.8 or higher required)
webrtc — connections opened via RTCPeerConnection instances to ICE servers (Adblock Plus 1.13.3 for Chrome and Opera, 3.0 for Firefox, or higher required)
document — сама страница (только исключающие правила могут быть применены к этой странице)
elemhide — только для исключающих правил, схоже с document но отключает только правила скрытия элементов, а не все правила фильтрации на странице (требуется Adblock Plus 1.2 и выше)
generichide — for exception rules only, similar to elemhide but only disables generic element hiding rules on the page (Adblock Plus 2.6.12 or higher required)
genericblock — for exception rules only, just like generichide but disables generic blocking rules (Adblock Plus 2.6.12 or higher required)
popup — pages opened in a new tab or window
other — типы запросов не перечисленные выше
The type options background, xbl and dtd are outdated and should no longer be used.
Обратные типы параметров: определяет типы элементов, фильтр к которым применяться не должен. Доступные параметры обратных типов: ~script, ~image, ~stylesheet, ~object, ~xmlhttprequest, ~object-subrequest, ~subdocument, ~document, ~elemhide, ~other
Ограничение на сторонние/собственные запросы: Если указана опция third-party, то фильтр применяется лишь к запросам ресурсов из внешних источников. Аналогично, ~third-party ограничивает фильтр запросами из того-же источника, что и открытая страница.
Ограничители доменов: Параметр domain=example.com означает, что фильтр должен быть применён только на страницах домена "example.com". Множество доменов можно установить, используя "|" как разделитель: с параметром domain=example.com|example.net фильтр будет применён только на страницах доменов "example.com" или "example.net". Если доменное имя начинается с "~", фильтр не должен применяться на страницах этого домена. Например, domain=~example.com показывает, что фильтр должен применяться на страницах любого домена, но "example.com" и domain=example.com|~foo.example.com ограничивает фильтр доменом "example.com" исключая поддомен "foo.example.com".
Sitekey restrictions: The option sitekey=abcdsitekeydcba means that the filter should only be applied on pages that provide a public key and a signature which can be verified by that very same public key that is also contained in the filter (but without the trailing =). Multiple sitekeys can be specified using "|" as separator: with the option sitekey=abcdsitekeydcba|bcdesitekeyedcb the filter will only be applied on pages providing either sitekey "abcdsitekeydcba" or "bcdesitekeyedcb". This is similar to domain restrictions but allows covering scenarios where a single filter should apply to a very large number of domains. Note that sitekey restrictions require modifications on the server-side.
Content Security Policies: The option csp=script-src: 'none' causes a Content Security Policy header of script-src: 'none' to be injected into HTTP responses for requested documents matching the filter — assuming that exception rules with the same option don't also match and that the document isn’t whitelisted. The Content Security Policy script-src: 'none' would in turn block all scripts — including inline — for the document. This filter option should generally be avoided, except as a last resort to counter advanced circumvention. (Adblock Plus 3.1 or higher required.)
match-case — определяет фильтр, который применяется только к адресам с совпадением букв, например фильтр */BannerAd.gif$match-case будет блокировать http://example.com/BannerAd.gif, но не http://example.com/bannerad.gif.
collapse — эта опция принудительно включает скрытие для данного элемента не смотря на значение глобальной настройки «Прятать метки на месте заблокированных элементов». Соответственно опция ~collapse выключает скрытие свободного места от данного элемента.
donottrack — для каждого адреса, который подходит под правило блокирования с этим параметром и не соответствует никаким исключающим правилам с этим параметром, Adblock Plus будет посылать заголовок Do-Not-Track (необходим Adblock Plus 1.3.5 или выше). Для обратной совместимости рекомендуется использовать этот параметр с противоречивыми параметрами типа. Это гарантирует, что в старых версиях Adblock Plus этот фильтр ничего не заблокирует: *$donottrack,image,~image
Rewrite the URL with the option rewrite=. You may want to create a regular expression filter to perform the rewrite operation. In that case, you can use $n in the rewrite argument, with n being a number between 1 and 100, to insert the n-th parenthesis submatch of the filter regular expression. Anything not explicitly matched by it will be added in the rewritten string. For example /(server\.com\/assets\/file.php)\?.*$/$rewrite=$1 will strip everything that comes after ".php" and redirects the request to the resulting URL. If there is no query string (i.e. no '?'), this filter won't match. The rewrite parameter has the same syntax as JavaScript’s String.prototype.replace(). The resulting URL must have the same origin; in case it is rewritten to a relative URL, the origin gets added back. Also, rewrite for scripts, subdocuments, objects, requests from within objects (like Flash) are not possible for security reason; even if explicitly stated by the filter. If both, a filter with/without $rewrite option matches, the behavior is undefined, i.e. the request might either be blocked or redirected. (Adblock Plus 3.2 or higher required.)
Использование регулярных выражений
Если желаете добиться большего контроля над тем, к чему ваши фильтры подходят, а к чему нет, то можете использовать регулярные выражения. Например, фильтр /banner\d+/ подойдёт к banner123 и banner321 , но не banners. Изучите документацию по регулярным выражениям и сможете составлять их сами.
Примечание: Для повышения производительности рекомендуется не использовать регулярные выражения, если этого можно избежать.
Скрытие элементов
Основные правила
Иногда вы будете встречать рекламу, которая не может быть заблокирована потому, что она была внедрена как текст в саму веб-страницу. Если вы посмотрите исходный код такой страницы, то найдёте нечто вроде этого:
<div class="textad">
Cheapest tofu, only here and now!
</div>
<div id="sponsorad">
Really cheap tofu, click here!
</div>
<textad>
Only here you get the best tofu!
</textad>
Для корректного отображения страницу необходимо полностью, а значит и реклама будет скачана и этого нельзя избежать. Всё, что тут можно сделать - скрыть то, что не желаете видеть. Для этого и применяются правила скрытие элементов.
Первый рекламный слоган выше находится внутри элемента DIV с классом «textad». Следующее правило скроет скроет именно такую комбинацию: ##.textad. Тут «##» является признаком правила скрытия, а остальное — селектором, определяющим скрываемый элемент. Скрывать элементы по их атрибуту ID можно аналогичным образом, ###sponsorad скроет второй слоган. Указывать имя самого элемента не обязательно, фильтр ##textad так же будет работать (* тоже не обязательна). Также можно скрывать элементы лишь по их имени. Например, {4} скроет третий рекламный слоган.
Расширение Element Hiding Helper поможет в выборе нужного элемента и написании соответствующего правила без изучения исходного кода страницы. Базовые знания в HTML желательны в любом случае.
Примечание: Правила скрытие кардинально отличается от обычных фильтров. Например, не поддерживаются привычные символы масок — они имеют другое значение и применение.
Ограничение правил определенными доменами
Обычно вы хотите скрыть определенную рекламу на определенном сайте и не хотите, чтобы это правило применялось на других сайтах. Например, правило ##.sponsor может скрыть полезный код на некоторых сайтах. Но если вы напишете его как example.com##.sponsor оно будет применено на http://example.com/ и http://something.example.com/ но не на http://example.org/. Вы также можете определить множество доменов - просто разделите их запятыми: domain1.example,domain2.example,domain3.example##.sponsor.
Если доменному имени предшествует "~", правило не будет применяться на страницах этого домена (требуется Adblock Plus 1.1 и выше). Например, ~example.com##.sponsor будет применяться на страницах с других доменов, "example.com" и example.com,~foo.example.com##.sponsor делает правило применимым к домену "example.com" с исключением поддомена "foo.example.com".
Примечание: Из-за способа, который применяется при скрытии элементов, вы можете использовать только полные доменные имена. Нельзя использовать другие части адресов и нельзя использовать domain как замену domain.example,domain.test.
Примечание: Правила скрытия элементов с ограничением доменов могут использоваться для скрытия элементов интерфейса браузера. Например, правило browser##menuitem#javascriptConsole скроет пункт Консоль JavaScript в меню Инструменты браузера Firefox.
Селекторы атрибутов
С некоторыми рекламными вставками справиться не так просто - их рекламный текст не имеет ни id, ни атрибута class. Вы можете использовать другие атрибуты для их скрытия, например ##table[width="80%"] будет скрывать таблицы атрибут width у которых установлен в 80%. Если вы не хотите определять полное значение атрибута, ##div[title*="adv"] будет скрывать все элементы div с атрибутом заголовка, содержащим строку "adv". Вы также можете проверять начало и конец атрибута, например ##div[title^="adv"][title$="ert"] будет скрывать элементы div начинающиеся с "adv" и заканчивающиеся "ert". Как видите, вы также можете использовать множество состояний — table[width="80%"][bgcolor="white"] будет подходить для таблиц с атрибутом width установленным в 80% и атрибутом bgcolor установленным в white.
Дополнительные селекторы
В принципе любой CSS селектор моно работающий в Firefox можно использовать для скрытия. Например следующее правило скроет всё, что вложено в элемент DIV с классом «adheader»: ##.adheader + *. Полный список CSS селекторов смотрите в спецификации CSS от W3C (учтите: на данный момент Firefox поддерживает ещё не все селекторы). Please keep in mind that browsers are slower to process these selectors than selectors based on class or id attribute only.
Примечание: Эта функция для продвинутых пользователей, необходимо свободное владение CSS селекторами, чтоб их корректно использовать. Adblock Plus не способен проверить синтаксис добавляемого селектора и если использовать неправильный синтаксис, то можно сломать другие (корректные) фильтры. Проверяйте консоль ошибок JavaScript на предмет сообщений об ошибках в CSS.
Extended CSS selectors (Adblock Plus specific)
Sometimes the standard CSS selectors aren't powerful enough to hide an advertisement. For those cases we have added some new selectors, namely :-abp-has(), :-abp-contains() and :-abp-properties() (requires Adblock Plus 1.13.3 or higher for Chrome and Opera).
When writing an element hiding filter that makes use of these extended selectors you must use the #?# syntax, e.g. example.com#?#selector. But it's important to note that doing so carries a performance impact, so do so sparingly and make sure those filters are specific to as few domains and elements as possible.
:-abp-properties()
:-abp-properties(properties) will select elements based upon stylesheet properties. For example :-abp-properties(width:300px;height:250px;) will select elements that have a corresponding CSS rule in a stylesheet which sets the width and height to the values 300px and 250px respectively. Property names are matched case-insensitively. Furthermore, wildcards can be used so that :-abp-properties(width:*px;height:250px;) will match any width specified in pixels and a height of 250 pixels.
You can also use regular expressions by surrounding the properties expression with "/". For example, :-abp-properties(/width:30[2-8]px;height:250px;/) will match widths between 302 and 308 pixels and a height of 250 pixels.
Note: The older syntax for the CSS property filters is deprecated and will be automatically converted to the new format . The syntax to select the style properties remain the same. For example, [-abp-properties='width:300px;height:250px;'] will be converted to :-abp-properties(width:300px;height:250px;).
:-abp-properties() will also select elements using the style properties found in their pseudo-elements, like ::before and ::after. For example, :-abp-properties(content:'Advertisment') will match elements where the string Advertisment is found in either their ::before or ::after pseudo element.
:-abp-has()
:-abp-has(selector) will select elements based on their content. For example :-abp-has(> div > a.advertiser) will select elements that contain as a direct descendant a <div> that contains an <a> with the class advertiser. The inner selector can be relative to the element scope, and can use any of the pseudo-selectors, including :-abp-has() and will determine whether the selection will occur.
:-abp-contains()
:-abp-contains(text) will select elements based on their text content. For example, div.sidebar > span:-abp-contains(Advertisment) will select the <span> elements within a <div>, with a class of sidebar that contains the word "Advertisment". In practice, you'd want to combine this with a :-abp-has() to select the outer container — something like div.sidebar > div:-abp-has(span:-abp-contains(Advertisment)) to select the container that would contain an advertisement label.
Исключения
Правила-исключения «выключают» отдельные правила блокировки и скрытия на определённых доменах. В основном они полезны авторам подписок, дополняющих сторонние подписки, которые они не могут изменить. Например, правило ##.textad можно выключить на example.com добавив исключение example.com#@#.textad. Комбинация этих двух правил идентична по эффекту одному правилу ~example.com##.textad. Применять такие исключения рекомендуется только в случае, когда изменить само правило скрытия не представляется возможным, во всех остальных случаях лучше изменить само правило. These exceptions will be applied to advanced pseudo-selector rules as well.
Generic / Specific filters
With the $generichide and $genericblock filter options the distinction between generic and specific filters becomes important.
We classify a filter to be specific if it matches one or more domains or matches a sitekey. If a filter has no domains specified (or only domain exceptions) and no sitekey then it counts as generic. For example, example.com##.textad is a specific filter, whereas both ##.textad and ~example.com##.textad are generic.
Note that with blocking rules the domain must be specified under the $domain option for them to be considered specific. For example, ||example.com^ is considered generic whereas */ads/*$domain=example.com is site-specific.
Implementing a sitekey on the server
For a sitekey-restricted filter to apply, a webpage needs to return base64-encoded versions of the public key and a signature which Adblock Plus can validate. Currently, this means including them in both the HTTP response header (X-Adblock-Key: abcdpublickeydcba_abcdsignaturedcba) and the root tag of the document (<html data-adblockkey="abcdpublickeydcba_abcdsignaturedcba">).
First you need to create a private RSA key (preferably 512 bit to keep the transfer volume low) and then a DER representation of the public key.
The data used for creating the signature is a concatenated list of request variables (namely URI, host and user agent) separated by the NUL character "\0". For example:
/index.html?q=foo\0www.example.com\0Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0
Finally, generate the signature for this string by using the signature algorithm SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE (default when using OpenSSL). |
технарь |
Отправлено: 8 сентября 2018 — 22:31 • Тема: Методика поиска неисправностей • Форум: Программатор Chameleon |
Ответов: 81 Просмотров: 57928
|
Цитата от Гость: выходит 7 ногу подключать не нужно, если Microvare? Я пока не знаю - нужно внимательно читать мануал... Давайте так - я попробую купить эту микруху в магазине. Если получится - будет возможность самому протестить модуль. |
|