Html2canvas: ํ”„๋กœ์ ํŠธ๊ฐ€ ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 07์›” 17์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: niklasvh/html2canvas

๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ด 2016๋…„ 1์›”์— ์žˆ์—ˆ๋˜ ๊ฒƒ์„ ๋ณด๋‹ˆ Pull ์š”์ฒญ๊ณผ ๋ฌธ์ œ๊ฐ€ ์Œ“์—ฌ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์“ด์ด๋Š” github๋‚˜ twitter์—์„œ ํ™œ๋™์„ ํ•˜์ง€ ์•Š๋Š”๋“ฏ...

์ด ํ”„๋กœ์ ํŠธ์˜ ํ™œ์„ฑ ํฌํฌ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. @eKoopmans ๊ฐ€ https://github.com/eKoopmans/html2canvas์— ์‘๋‹ตํ•˜๊ฑฐ๋‚˜ PR์„ ์ œ์ถœํ•˜๋Š” ์ฃผ์š” ์‚ฌ๋žŒ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๊ทธ๊ฒƒ์€ ๋†€๋ผ์šด ํ”„๋กœ์ ํŠธ์ด์ง€๋งŒ ์›น ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฏธ์นœ ์†๋„๋กœ ์ง„ํ–‰๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

@aparij ๋‹˜ , ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋” ์ ๊ทน์ ์œผ๋กœ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ถ„๋ช…ํžˆ ์ €์—๊ฒŒ๋„ ๋” ๋งŽ์€ ์ฐธ์—ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ €๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ Œ๋”๋งํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€๋Šฅํ•œ ํ•œ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ๋งŽ์€ ๋ถ€ํ’ˆ์„ ์Šค๋ ˆ๋“œํ•  ์ˆ˜ ์žˆ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ง๋ ฌํ™”ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด CSS ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ์ถ”๊ฐ€
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ „ํžˆ ํ˜•์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค(Flow ์‚ฌ์šฉ).
  • ๊ฐœ์„ ๋œ ํ…์ŠคํŠธ ๋ Œ๋”๋ง, ์Šค๋ ˆ๋”ฉ, ๊ตฌ๋ฌธ ๋ถ„์„์„ ํ•„์š”ํ•œ ์ตœ์†Œ๋Ÿ‰์œผ๋กœ ์ œํ•œํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ์žฅ์น˜ ํ”ฝ์…€ ๋น„์œจ๋กœ ์ธํ•œ ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ์ด๋ฏธ์ง€ ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ์ œํ•œ ๋“ฑ์„ ์ดˆ๊ณผํ•˜๋Š” ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋กœ ์ธํ•œ ๊ฒ€์€์ƒ‰ ์ด๋ฏธ์ง€ ์™€ ๊ฐ™์€ ๋ชจ๋ฐ”์ผ ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€ ํ”„๋ก์‹œ(CORS์šฉ)์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์‚ฌ์–‘ ์ƒ์„ฑ, html2canvas๊ฐ€ ํ˜„์žฌ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ฝ˜ํ…์ธ (์˜ˆ: SVG)๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ๋ช…ํ™•ํ•œ ๋ฌธ์„œ๋กœ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์žฌ์ž‘์—…

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

@aparij ๋‹˜ , ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋” ์ ๊ทน์ ์œผ๋กœ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ถ„๋ช…ํžˆ ์ €์—๊ฒŒ๋„ ๋” ๋งŽ์€ ์ฐธ์—ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ €๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ Œ๋”๋งํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€๋Šฅํ•œ ํ•œ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ๋งŽ์€ ๋ถ€ํ’ˆ์„ ์Šค๋ ˆ๋“œํ•  ์ˆ˜ ์žˆ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ง๋ ฌํ™”ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด CSS ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ์ถ”๊ฐ€
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ „ํžˆ ํ˜•์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค(Flow ์‚ฌ์šฉ).
  • ๊ฐœ์„ ๋œ ํ…์ŠคํŠธ ๋ Œ๋”๋ง, ์Šค๋ ˆ๋”ฉ, ๊ตฌ๋ฌธ ๋ถ„์„์„ ํ•„์š”ํ•œ ์ตœ์†Œ๋Ÿ‰์œผ๋กœ ์ œํ•œํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ์žฅ์น˜ ํ”ฝ์…€ ๋น„์œจ๋กœ ์ธํ•œ ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ์ด๋ฏธ์ง€ ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ์ œํ•œ ๋“ฑ์„ ์ดˆ๊ณผํ•˜๋Š” ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋กœ ์ธํ•œ ๊ฒ€์€์ƒ‰ ์ด๋ฏธ์ง€ ์™€ ๊ฐ™์€ ๋ชจ๋ฐ”์ผ ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€ ํ”„๋ก์‹œ(CORS์šฉ)์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์‚ฌ์–‘ ์ƒ์„ฑ, html2canvas๊ฐ€ ํ˜„์žฌ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ฝ˜ํ…์ธ (์˜ˆ: SVG)๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
  • ๋ช…ํ™•ํ•œ ๋ฌธ์„œ๋กœ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์žฌ์ž‘์—…

@niklasvh ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ตœ๊ทผ์— ์ž์œ  ์‹œ๊ฐ„์ด ๋งŽ์ง€ ์•Š๊ณ  ์•ฝ๊ฐ„์˜ ์ง์—… ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋•Œ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ํŒจํ‚ค์ง€์— ๊ฐ์‚ฌํ–ˆ๊ณ  ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

SVG ๋ Œ๋”๋ง ์˜ต์…˜์„ ๊ณ ๋ คํ–ˆ๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ ? ๊ธฐ์กด ๊ตฌํ˜„์—์„œ ํฐ ๋ณ€ํ™”๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„์ ์œผ๋กœ ์Šคํƒ€์ผ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋งŽ์€ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฉ‹์ง€๋„ค์š” @eKoopmans! ๋‚˜๋Š” ๋‹น์‹ ์ด ๋งŽ์€ PR์„ ์ œ์ถœํ•œ ๊ฒƒ์„ ๋ณด์•˜๊ณ , ๋ฐ”๋ผ๊ฑด๋Œ€ ์ ์–ด๋„ ๊ทธ๋“ค ์ค‘ ๋Œ€๋ถ€๋ถ„์€ ๋‹ค์Œ ๋ฒ„์ „์— ํ†ตํ•ฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

foreignObject ๋ Œ๋”๋ง๊ณผ ๊ด€๋ จํ•˜์—ฌ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์–ด ์™”์œผ๋ฉฐ ์ผ๋ถ€ ์ด์ „ ๋ฒ„์ „์˜ html2canvas์—์„œ ์ด๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(https://github.com/niklasvh/html2canvas/blob/0.4.1/src/ ์ง€์›ํ•˜๋Š” ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ Support.js#L3 https://github.com/niklasvh/html2canvas/blob/0.4.1/src/Util.js#L18 ). ๋ถˆํ–‰ํ•œ ์ ์€ Firefox๊ฐ€ ์บ”๋ฒ„์Šค๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ฝ˜ํ…์ธ (์ด๋ฏธ์ง€ ํฌํ•จ) ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜๋Š” ์œ ์ผํ•œ ๋ธŒ๋ผ์šฐ์ €๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ Firefox์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Chrome์ด ๊ฐœ์„ ๋˜์—ˆ์ง€๋งŒ(์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ž์„ธํžˆ ์ถ”์ ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ) ์—ฌ์ „ํžˆ ํ•˜์œ„ ๋ฆฌ์†Œ์Šค(์˜ˆ: ์ด๋ฏธ์ง€)๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ…์ŠคํŠธ ๋ Œ๋”๋ง๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์ž‘์€ ๋ถ€๋ถ„์— ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ html2canvas๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ(ํ…์ŠคํŠธ ๋ฒ”์œ„ ์ธก์ •)๋ณด๋‹ค ๋” ํšจ์œจ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ธ์ง€ ์—ฌ๋ถ€๋Š” ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ € ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. afaik IE/Safari๋Š” ์บ”๋ฒ„์Šค๋ฅผ ์ฆ‰์‹œ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ ๋Š” foreignObject ์ฝ˜ํ…์ธ ์˜ ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@niklasvh ๋ฐ˜๊ฐ€์›Œ์š” ๐Ÿ‘ , ๋‹ค์Œ ๋ฒ„์ „์€ ์–ธ์ œ ๋‚˜์˜ค๋‚˜์š”?

์—ฌ๊ธฐ์—์„œ ํ”„๋กœ์ ํŠธ ํƒญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ ์„ธํŠธ ๋ฐ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๋กœ๋“œ๋งต์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๋ณผ ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒ€์‚ฌ, ๊ฐœ์„  ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ ์ ๊ทน์ ์œผ๋กœ ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ๋‹จ์ง€ ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋น„๋ˆ„๋ฐ•์‹ฑ์„ ํ•˜๋Š” ๋™์•ˆ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ @niklasvh๋ฅผ ํ•˜๋ผ๊ณ  ์ œ์•ˆํ•˜๊ณ  ์‹ถ์€ ๋ช‡ ๊ฐ€์ง€ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ 659๊ฐœ์˜ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ •๋ง ๋งŽ๋„ค์š”. ์˜ฌํ•ด ์ดํ›„๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋‹ซ๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” 5/27ํŽ˜์ด์ง€ ์ •๋„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ค‘๋ณต ํ•ญ๋ชฉ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ์ž‘์—…ํ•  ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ณผ์ž‰ ์„ฑ์žฅ์„ ๋ณด๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

  2. pull ์š”์ฒญ๋„ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ๋˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜, ์ด๋ฅผ ์™„์ „ํžˆ ๋ถ€์ธํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ™์€ ํƒ€์ž„๋ผ์ธ์„ ์ œ์•ˆํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌํ•ด๋ณด๋‹ค ์˜ค๋ž˜๋œ ํƒ€์ž„๋ผ์ธ์€ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง„์งœ ๋ฌธ์ œ๋ผ๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๊ทธ ํ›„์— ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๋ฅผ ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์กฐ์ง๋œ ํ•ญ๋ชฉ, ์‚ฌ์šฉ๋œ ๋„๊ตฌ, OSS์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์นœํ™˜๊ฒฝ์ ์ธ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ์งง์€ ์†Œ๊ฐœ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์€์ง€์— ๋Œ€ํ•œ ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  4. @eKoopmans ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ PR์„ ์ œ์ถœํ•œ ์‚ฌ๋žŒ์€ OSS ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ธˆ์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ์ผ๋ถ€(ํŠนํžˆ ๊ฐ€์ง€์น˜๊ธฐ)๋ฅผ ๋„์™€์ค„ ๊ณต์‹ ํ˜‘๋ ฅ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

@luck2011 ์ •ํ™•ํ•œ ์ผ์ •์„ ์•Œ๋ ค๋“œ๋ฆด ์ˆ˜๋Š” ์—†์ง€๋งŒ ๊ณง ์ž‘๋™ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๋ถ„๊ธฐ๊ฐ€

@markadrake ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ €๋Š” ์ตœ๊ทผ์— ๊ณต๊ฐœ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ํ™•์‹คํžˆ ์‚ดํŽด๋ณด๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€/ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ/๋‹ซ๊ณ  ๊ฐ ํ’€ ์š”์ฒญ์„ ํ†ตํ•ด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์— ๋Œ์–ด์˜ค๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. .

์ดํ›„๋ถ€ํ„ฐ๋Š” ์ œ์•ˆํ•˜์‹  ๋Œ€๋กœ ์ €์™€ ๊ณต๋™ ์ž‘์—…์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜์—ฌ ๋‹ค์‹œ๋Š” ์ด๋Ÿฐ ์ผ์ด ์Œ“์ด์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ž ์žฌ์ ์ธ ํ•ญ๋ชฉ์„ ๋ฐฑ๋กœ๊ทธ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ ๋ฉ‹์ง€๋‹ค @niklasvh

ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ https://github.com/niklasvh/html2canvas/tree/v1.0.0์œผ๋กœ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฒ„์ „์— ๋„๋‹ฌํ•˜๋ ค๋ฉด ์•„์ง ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@eKoopmans https://github.com/niklasvh/html2canvas/commit/a73dbf8067c92e4f25f4db71f75643f0647cb1ac ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ foreignObject ๋ Œ๋”๋ง ์ง€์›์„ ๋‹ค์‹œ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ foreignObject ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜๊ณ (์˜ต์…˜์œผ๋กœ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ํ•œ) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜ html2canvas ๋ Œ๋”๋ง์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์†Œ์‹์ธ ๊ฒƒ ๊ฐ™์•„์š”! ์กฐ๋งŒ๊ฐ„ ํ•œํŒ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”. ํ”„๋กœ์ ํŠธ์—์„œ ์ˆ˜๊ณ  ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@niklasvh , ์šฐ์ˆ˜ํ•œ ํ”„๋กœ์ ํŠธ ๋ฐ ๋‹ค์‹œ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค!!
์•„์‹œ๋‹ค์‹œํ”ผ ๋น„๋””์˜ค๋Š” ๊ธฐ๋ณธ ํƒœ๊ทธ์ด๋ฏ€๋กœ ์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ˆ˜๋ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
ํ›Œ๋ฅญํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š” @niklasvh , ๋ฒ„์ „ 1.0.0์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? v1.0.0 ๋ถ„๊ธฐ๊ฐ€ ์—ฌ์ „ํžˆ ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋…ธ๋ ฅ์— ๋Œ€ํ•ด Thx!

@jyguyomarch v1.0.0์ด ์ตœ์‹  ๋ฒ„์ „์˜ 1.0.0 ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š” ๋งˆ์Šคํ„ฐ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ svg ๋ Œ๋”๋ง๊ณผ ์ „์ฒด ๋ฌธ์„œ์˜ ๊ฐœ์ •์ด ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ํ›„, ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•˜๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ œ/PR์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1.0.0 ๋ฆด๋ฆฌ์Šค์— ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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