После уведомления @ DavidPostill я снова посмотрел на структуру страницы. Похоже, что текстовые объявления перемещаются за пределы, div.spon_links
когда включен Adblock Edge, для которого действительно есть правило фильтрации spon_links
. Является ли это неправильным поведением Adblock Edge или каким-либо противодействием со стартовой страницы, я не знаю.
Существует более простое решение, чем добавление пользовательского скрипта Greasemonkey - простая замена Adblock Edge на uBlock также решила проблему.
При дальнейшем расследовании реклама исчезает только при включенном uBlock, когда Adblock Edge полностью отключен одновременно («Отключить везде»). Даже если я отключу его только для стартовой страницы («Отключить на startpage.com»), сайт переместит рекламу за пределы spon_links
контейнера. Я объясняю это тем, что стартовой странице каким-то образом удается получить доступ к моим настройкам надстроек и проверить, включен ли вообще Adblock . Может ли это быть так противно ?!
Используя подход Дэвида Greasemonkey и removeChild
, я придумал следующее решение, которое все еще работает, когда установлен Adblock Edge. Кажется, нужно подождать, пока страница загрузится и поиграется, избегая рекламного блока, пока вы, наконец, не сможете найти и удалить нарушающие элементы:
// ==UserScript==
// @name startpage/ixquick remove ads
// @namespace startpage.com
// @description Removes ads from startpage/ixquick before they are displayed.
// @include https://startpage.com/*
// @include https://*.startpage.com/*
// @include https://ixquick.com/*
// @include https://*.ixquick.com/*
// @run-at document-end
// @grant none
// @version 2015-09-29
// ==/UserScript==
var fun = function() {
var results = document.getElementById('bottom-result-container');
if (results) {
var ols = results.getElementsByTagName('ol');
for (i = 0; i < ols.length; i++) {
var ol = ols[i];
var ps = ol.getElementsByTagName('p');
for (j = 0; j < ps.length; j++) {
var p = ps[j];
if (p.className == 'head2') {
var spans = p.getElementsByTagName('span');
for (k = 0; k < spans.length; k++) {
if (spans[k].innerHTML.contains("Ads related to")) {
ol.innerHTML = '';
}
}
}
}
}
}
};
setTimeout(fun, 1);
(Извините, мой JavaScript немного ржавый, возможно, проще с jQuery.)