Html2canvas: ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ IE11์˜ ๋ Œ๋”๋ง ์˜ค๋ฅ˜

์— ๋งŒ๋“  2019๋…„ 08์›” 30์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: niklasvh/html2canvas

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ:

1.0.0-rc3์—์„œ #1451๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ CSS๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

<strong i="7">@media</strong> screen and (min-width: 1360px) {
...
}
<strong i="8">@media</strong> screen and (max-width: 1575px) {}
<strong i="9">@media</strong> screen and (max-width: 980px) {}

Chrome ๋ฐ Edge์—์„œ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋Š” ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ IE11์—์„œ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ž‘์€ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š” div์˜ ๋„ˆ๋น„๋Š” <strong i="12">@media</strong> screen and (max-width: 980px) {} CSS์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ https://stackoverflow.com/questions/31793507/html2canvas-renders-page-with-wrong-layout-in-ie11-whed-devtools-not-opened#comment92407156_31800273 ์˜ ์ง€์‹œ์— ๋”ฐ๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค . //github.com/niklasvh/html2canvas/blob/master/src/dom/document-cloner.ts#L429 ์—์„œ cloneIframeContainer.width = (bounds.width + 1).toString(); . ๊ทธ๋Ÿฌ๋‚˜ ์ƒํ™ฉ์€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ํ•˜๋‚˜์˜ ์ด์ƒํ•œ ์ . https://stackoverflow.com/questions/31793507/html2canvas-renders-page-with-wrong-layout-in-ie11-whed-devtools-not-opened#comment92407156_31800273 ์˜ ์ƒํ™ฉ๋„ ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚ฌ๋‹ค. devtools๋ฅผ ์—ด๋ฉด ๋ Œ๋”๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—ฐ๊ตฌ์™€ ํ•จ๊ป˜. Always refresh from server ๊ตฌ์„ฑ์„ ์—ด๋ฉด ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๊ฐ€ ์ž˜๋ชป๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

  • html2canvas ๋ฒ„์ „ ํ…Œ์ŠคํŠธ: 1.0.0-rc3
  • ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋ฒ„์ „: IE11
  • ์šด์˜ ์ฒด์ œ: Win10

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

IE11์€ ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: ;)

https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a-browser-so-stop-using-it-as-your-default/

html2canvas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” IE11์—์„œ ๋งˆ๋ชจ๋œ ์ž‘์—…์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์–ด์จŒ๋“  ๋‚ด ๊ฒฝํ—˜). ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—์ง€๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  7 ๋Œ“๊ธ€

IE11์€ ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: ;)

https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a-browser-so-stop-using-it-as-your-default/

html2canvas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” IE11์—์„œ ๋งˆ๋ชจ๋œ ์ž‘์—…์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์–ด์จŒ๋“  ๋‚ด ๊ฒฝํ—˜). ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—์ง€๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค, IE11์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด ํŽ˜์ด์ง€๋Š” h2c์™€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ๋ฌธ์ œ๋Š” ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค! :(

๊ทธ ๋Š๋‚Œ์„ ์•Œ์•„์š” :)

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์€ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ CSS๊ฐ€ ์บ์‹œ ์ง€์šฐ๊ธฐ ํ›„์— ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— IE์˜ ์บ์‹œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ init h2c ์ „์— CSS์— ๋Œ€ํ•œ ๋ชจ๋“  ๋งํฌ ํƒœ๊ทธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  href ๋’ค์— ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ h2c๊ฐ€ ์ด๋Ÿฌํ•œ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์บ์‹œ ๋Œ€์‹  ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

            var links = document.getElementsByTagName('link');
            for(var i in links){
                if(links[i].href){
                    links[i].href = (links[i].href + "?timestamp=" + new Date().getTime());
                }
            }

์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋Š”๋ฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ๋‚˜์š”?

@jdsxzhao

์ €๋Š” ์ด ๋ฌธ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์œผ๋ฉฐ ์œ„์—์„œ ๋ณด๊ณ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ด์ „ ์†”๋ฃจ์…˜์ด ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์œ„์น˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

close() ํ˜ธ์ถœ ์ „์— width + 1 ํ•ต์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  iframe ๋กœ๋” ์•ฝ์† ๋‚ด๋ถ€์—์„œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ง์ „์— ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/niklasvh/html2canvas/blob/3982df1492bdc40a8e5fa16877cc0291883c8e1a/src/dom/document-cloner.ts#L100

์ด์ œ ํ•ด๋‹น ์กฐ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

if (documentClone.fonts && documentClone.fonts.ready) {
  await documentClone.fonts.ready;
}

iframe.width = parseInt(iframe.width) + 1;

if (typeof onclone === 'function') {
  return Promise.resolve()
    .then(() => onclone(documentClone))
    .then(() => iframe);
}

parseInt๋Š” ๋„ˆ๋น„์— 10x๋ฅผ ๊ณฑํ•˜๋Š” ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ๋กœ ๋„ˆ๋น„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์ง ํ”„๋กœ๋•์…˜์— ์ ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์—์„œ ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•œ ๋ถ€์ž‘์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ƒํ™ฉ์ด ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰