๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/html, css, scss

โœˆ img ํƒœ๊ทธ 404 Error์‹œ์— ๋Œ€์ฒด ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ

by ๋‚ฏ์„ ๊ณต๊ฐ„2019 2019. 11. 11.

๋ชฉ์ฐจ

    img ํƒœ๊ทธ 404 Error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋Œ€์ฒด ์ด๋ฏธ์ง€๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์€ ์‰ฝ๋‹ค.

    ์•„๋‹ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด ๋ณ„๋กœ ๊ฑฑ์ •ํ•  ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋Œ€์ฒด๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ด๋ฏธ์ง€๋Š” bg์†์„ฑ์„ ์ค€ ์Šคํƒ€์ผ์„ ๋จน์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋ฏ€๋กœ, bg๊ฐ€ ๊น”๋ฆฌ์ง€ ์•Š์œผ๋ฉด ์Šคํƒ€์ผ๋งŒ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

    ๊ทธ ์ด์™ธ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ด๋ฏธ์ง€ ์š”์†Œ๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

    ๋ฌธ์ œ๋Š” ๊ฒŒ์‹œํŒ์ด๋‚˜, ๊ฐค๋Ÿฌ๋ฆฌ ๋“ฑ ๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž ๋นŒ๋Ÿฐ ๊ทธ๋ฃน์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜, ์˜ฌ๋ ธ๋˜ ์ด๋ฏธ์ง€ ์†Œ์Šค ์ฃผ์†Œ๊ฐ€ ์—†์–ด์ง„ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฏธ์ง€ ์—๋Ÿฌ ๋ฌธ์ œ๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    <img id="ํƒœ๊ทธ_์•„์ด๋””" scr="์ด๋ฏธ์ง€_์ฃผ์†Œ" onError="this.src='๋Œ€์ฒด_์ด๋ฏธ์ง€_์ฃผ์†Œ';">

    ๊ทธ๋Ÿฐ๋ฐ ์•ž์„œ๋„ ์ง€์ ํ–ˆ์ง€๋งŒ ๊ฒŒ์‹œํŒ์— ์ด๋ฏธ์ง€๋ฅผ ๋ถˆํŽŒํ•ด๋‹ค ๋ถ™์ด๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์นœ์ ˆํ•˜๊ฒŒ htmlํƒœ๊ทธ๋ฅผ ์—ด์–ด์„œ ๋Œ€์ฒด ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋Š” attr์„ ์ง‘์–ด๋„ฃ๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ๋‹ค.

    ๋”ฐ๋ผ์„œ globalํ•œ ์ œ์ด์ฟผ๋ฆฌ๊ฐ€ imgํƒœ๊ทธ๋ฅผ ํ•œ ๋ฒˆ ๋Œ๋ฉด์„œ ์—๋Ÿฌ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€์ฒด ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์—†์• ๋Š” ์ž‘์—…์„ ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข€ ๋” ์นœ์ ˆํ•œ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ด๋‹ค.

    $(document).ready(function () {
        // no image
        $("img").each(function (i, ele) {
            var uri = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
            //์ด๋ฏธ load๋œ ์ด๋ฏธ์ง€๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
            if (ele.src != '' && ele.complete == true && ele.naturalWidth == 0) {
                $(this).attr("src", uri);
                $(this).attr("width", "1px");
            }
            //load๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€๋“ค์€ error ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค
            $(this).on('error', function () {
                $(this).attr("src", uri);
                $(this).attr("width", "1px");
            });
        });
    });

    ์ด ์ฝ”๋“œ๊ฐ€ ๊ทธ๋‚˜๋งˆ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๋‹ค.

    ์ œ์ด์ฟผ๋ฆฌ each๋ฅผ ๋Œ๋ ค์„œ ์ด๋ฏธ ๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ฐพ์•„์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ์กฐ๊ฑด๋ฌธ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด๋“ค์ด๋‹ค.

    ์—๋Ÿฌ๊ฐ€ ๊ฐ์ง€๋œ ์ด๋ฏธ์ง€์— data:image/gif;base64๋กœ ์ž‘์„ฑ๋œ ์ด๋ฏธ์ง€ ์†Œ์Šค๋ฅผ ์ฃผ์—ˆ์ง€๋งŒ, ๊ผญ ์ €๊ฒŒ ์•„๋‹ˆ์–ด๋„ ์˜จ๋ผ์ธ ์ƒ์— ์กด์žฌํ•˜๋Š” ๋Œ€์ฒด ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•ด๋„ ๋œ๋‹ค.

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ "width", "1px"๋„ ์ทจํ–ฅ ๋ฌธ์ œ๋‹ค.

    ์Šคํƒ€์ผ์„ ์ ์ ˆํžˆ ์ฃผ๊ฑฐ๋‚˜, ๋Œ€์ฒด ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋กœ ์ง€์ •ํ•ด ์ฃผ์–ด๋„ ๋œ๋‹ค.

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€