Після повідомлення @ DavidPostill я знову переглянув структуру сторінки. Виявляється, що текстові оголошення переміщуються за межами періоду, div.spon_links
коли ввімкнено Adblock Edge, для якого дійсно є правило фільтрації spon_links
. Чи це неправильне поведінка Adblock Edge чи якесь контр-дія зі стартової сторінки, я не знаю.
Є більш просте рішення, ніж додавання користувацького скрипта Greasemonkey - проста заміна Adblock Edge на uBlock також вирішила проблему.
При подальшому дослідженні оголошення зникають лише з увімкненим функцією uBlock, коли одночасно вимкнено Adblock Edge ("Вимкнути всюди"). Навіть якщо я відключую її лише для стартової сторінки ("Вимкнути на startpage.com"), сайт переміщує рекламу за межі spon_links
контейнера. Моє пояснення полягає в тому, що Startpage якось вдається отримати доступ до моїх налаштувань Додатків і перевіряє, чи ввімкнено функцію 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.)