Захват изображений с HTML-страницы в массиве с использованием JavaScript - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь захватить все изображения на HTML-странице, используя Javascript.Я нашел этот похожий вопрос, лучший ответ на который дает в деталях решение проблемы: Обнаружение всех изображений с помощью Javascript на html-странице

Мой вопрос заключается в том, что я не могуполучить код, показанный в лучшем ответе, чтобы работать без ошибок - даже когда я копирую / вставляю прямо в консоль Firefox.Я подозреваю, что ответ прост, хотя он заставлял меня чесать голову часами - кто-нибудь может помочь, пожалуйста?

Этот код выдает мне сообщение об ошибке «SyntaxError: missing) после списка аргументов» ...

var elements = document.body.getElementsByTagName("*");
Array.prototype.forEach.call( elements, function ( el ) {
    var style = window.getComputedStyle( el, false );
    if ( style.backgroundImage != "none" ) {
        images.push( style.backgroundImage.slice( 4, -1 ).replace(/['"]/g, "")
    }
}

Полное решение, которое, кажется, включает в себя вышеупомянутое, также дает ту же ошибку ...

var images = [],
    bg_images = [],
    image_parents = [];
document.addEventListener('DOMContentLoaded', function () {
    var body = document.body;
    var elements = document.body.getElementsByTagName("*");

    /* When the DOM is ready find all the images and background images
        initially loaded */
    Array.prototype.forEach.call( elements, function ( el ) {
        var style = window.getComputedStyle( el, false );
        if ( el.tagName === "IMG" ) {
            images.push( el.src ); // save image src
            image_parents.push( el.parentNode ); // save image parent

        } else if ( style.backgroundImage != "none" ) {
            bg_images.push( style.backgroundImage.slice( 4, -1 ).replace(/['"]/g, "") // save background image url
        }
    }

    /* MutationObserver callback to add images when the body changes */
    var callback = function( mutationsList, observer ){
        for( var mutation of mutationsList ) {
            if ( mutation.type == 'childList' ) {
                Array.prototype.forEach.call( mutation.target.children, function ( child ) {
                    var style = child.currentStyle || window.getComputedStyle(child, false);
                    if ( child.tagName === "IMG" ) {
                        images.push( child.src ); // save image src
                        image_parents.push( child.parentNode ); // save image parent
                    } else if ( style.backgroundImage != "none" ) {
                        bg_images.push( style.backgroundImage.slice( 4, -1 ).replace(/['"]/g, "") // save background image url
                    }
                } );
            }
        }
    }
    var observer = new MutationObserver( callback );
    var config = { characterData: true,
                attributes: false,
                childList: true,
                subtree: true };

    observer.observe( body, config );
});

Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2019

Вам не хватает некоторых закрывающих скобок в строке images.push() и последней строке.

Не уверен, заставит ли ваш код делать то, что вы в конечном итоге хотите, но он по крайней мере не сделаетвызвать синтаксическую ошибку.

var elements = document.body.getElementsByTagName("*");
Array.prototype.forEach.call( elements, function ( el ) {
    var style = window.getComputedStyle( el, false );
    if ( style.backgroundImage != "none" ) {
        images.push(style.backgroundImage.slice(4, -1).replace(/['"]/g, ""));
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...