Po zawiadomieniu @ DavidPostill ponownie spojrzałem na strukturę strony. Wygląda na to, że reklamy tekstowe są przenoszone poza okres, w div.spon_links
którym włączona jest funkcja Adblock Edge, która faktycznie ma regułę filtrowania spon_links
. Czy jest to niewłaściwe zachowanie Adblock Edge, czy też jakieś przeciwdziałanie ze strony początkowej, nie wiem.
Istnieje prostsze rozwiązanie niż dodanie niestandardowego skryptu Greasemonkey - po prostu zamiana Adblock Edge na uBlock również rozwiązała problem.
Po dalszym badaniu reklamy znikają tylko przy włączonym uBlock, gdy Adblock Edge jest całkowicie wyłączony w tym samym czasie („Wyłącz wszędzie”). Nawet jeśli wyłączę to tylko dla Startpage („Wyłącz na startpage.com”), witryna przenosi reklamy poza spon_links
kontener. Wyjaśniam, że Startpage jakoś udaje się uzyskać dostęp do moich preferencji dodatków i sprawdza, czy Adblock jest ogólnie włączony . Czy to może być takie paskudne ?!
Korzystając z podejścia Davida do Greasemonkey i removeChild
wymyśliłem następujące rozwiązanie, które nadal działa po zainstalowaniu Adblock Edge. Wygląda na to, że trzeba poczekać, aż strona się załaduje i zacznie się bawić, unikając blokowania reklam, aż w końcu będzie można zlokalizować i usunąć szkodliwe elementy:
// ==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);
(Niestety, mój JavaScript jest trochę zardzewiały, prawdopodobnie łatwiejszy w jQuery.)