Заменить источник изображений для всех изображений

Я хочу заменить атрибут src для всех изображений, соответствующих регулярному выражению, с помощью сценариев Greasemonkey. Пример:

Заменить http://aff.kooora.com/i/z3.gif

С http://example.com/aff.kooora.com/i/z3.gif

У меня нет опыта написания скриптов, но вот что я придумал:

var allImg=document.getElementsByTagName("img"), i=0, img;
var pattern = aff\.kooora\.com/([A-Za-z0-9/._]*);
while(img=allImg[i++])
{
    result = pattern.exec(img);
    if (result!=null) 
        img.src=img.src.replace(result, 'http://example.com/' + result);
}

Это не работает.


person Abdullah    schedule 09.04.2012    source источник


Ответы (3)


Проблема заключается в вашем регулярном выражении, вам нужно заключить его в косую черту (иначе интерпретатор понятия не имеет, что он должен рассматривать это как регулярное выражение):

var allImg=document.getElementsByTagName("img"), i=0, img;

var pattern = /^http\:\/\/aff\.kooora\.com\/(.*)$/;

while (img = allImg[i++])
{
    if (img.src.match(pattern)) {
        img.src = img.src.replace(pattern, 'http://example.com/aff.kooora.com/$1');
    }
}
person Niko    schedule 09.04.2012
comment
Спасибо!! Однако вы не правильно поняли регулярное выражение. Это отредактированная рабочая версия var allImg=document.getElementsByTagName("img"), i=0, img; var pattern = /^http\:\/\/aff\.kooora\.com\/(.*)$/; while (img = allImg[i++]) { if (img.src.match(pattern)) { img.src = img.src.replace(pattern, 'http://example.com/?url=aff.kooora.com/$1'); } } - person Abdullah; 09.04.2012
comment
Ах, я вижу, в замене не было aff.kooora.com - исправлено! - person Niko; 09.04.2012

Просто альтернатива.

В этом скрипте Greasemonkey ProxyLoadIMG это выполняется без использования регулярного выражения.

Он был создан для загрузки изображений через прокси.
Только изображения. Ссылки и другой контент остается нетронутым.

var proxy = 'https://proxytea.appspot.com/'

for (var x=0; x<document.images.length; x++) {
    imagem = document.images[x];
    imagem.src = imagem.src.replace(location.protocol + '//', proxy);
}

http://aff.kooora.com/i/any.jpg становится https://proxytea.appspot.com/aff.kooora.com/i/any.jpg
http://aff.kooora.com/i/z3.gif становится https://proxytea.appspot.com/aff.kooora.com/i/z3.gif
и так далее...

RegEx не нужен :)

person RASG    schedule 10.04.2012
comment
Он работал отлично, с гораздо меньшим количеством хлопот. Есть ли способ заставить его включать файл CSS через прокси? - person Abdullah; 10.04.2012
comment
Да. Точно так же, как document.images — это набор всех изображений на странице, document.styleSheets — это набор стилей. Вы можете использовать аналогичный код для загрузки CSS через прокси. - person RASG; 10.04.2012
comment
Этот скрипт делает то же самое со всеми ссылками вместо изображений userscripts.org/scripts/show/77701 а этот загружает все через случайный прокси userscripts.org/scripts/show/77042 - person RASG; 10.04.2012
comment
Я изменил сценарий следующим образом: var proxy = 'https://proxytea.appspot.com/' for (var x=0; x<document.styleSheets.length; x++) { imagem = document.styleSheets[x]; imagem.href = imagem.href.replace(location.protocol + '//', proxy); } Но мне кажется, что я что-то упускаю, потому что он не работает. - person Abdullah; 11.04.2012

Использовать это:

function replaceImages(oldUrl, newUrl) {
    var imgs = document.getElementsByTagName('img')
    for (i = 0; i<imgs.length; i++) {
        imgs[i].src = imgs[i].src.replace(oldUrl, remoteUrl)
    }
}

replaceImages('http://aff.kooora.com/i/z3.gif', 'http://example.com/aff.kooora.com/i/z3.gif')

Это также здорово, если вы работаете над локальной версией сайта и вам не нужно загружать весь их графический контент.

person Luke Femur    schedule 04.07.2015