μ¬κΈ°μ PDF νμΌμ 첨λΆ(κΆμ₯)νκ±°λ λ§ν¬:
ꡬμ±:
v2.2.228
λ¬Έμ λ₯Ό μ¬ννλ λ¨κ³:
unsafe-inline
λ°©μ§νλ μ½ν
μΈ λ³΄μ μ μ±
μ΄ μμ΅λλ€.
v2.2.228
Function("r", "regeneratorRuntime = r")(runtime);
μΆκ° μ 보:
μ μ¬ν λ¬Έμ #10229
v2.2.228
μ΄ νμ μ μ± μ μλ°νμ΅λλ€. Function("r", "regeneratorRuntime = r")(runtime);
μ΄λ μ€μ λ‘ PDF.js λΌμ΄λΈλ¬λ¦¬ μ체 λ΄μμ μμλ μ½λκ° μλλΌ μ΄μ λΈλΌμ°μ μμ async
/ await
λ₯Ό μ§μνλ λ° νμν Babel ν΄λ¦¬νμμ κ°μ Έμ΅λλ€. λ°λΌμ λΆννλ μ¬κΈ° μ λν΄ λ¬΄μμ ν μ μλμ§ λͺ
ννμ§ μμ΅λλ€.
μ, λμ μ μ€νΈλ¦Όμ λ³΄κ³ ν΄μΌ νλ€κ³ μκ°ν©λλ€.
@timvandermeij pdf.jsμ μ½λλ polyfillμ΄ νμνμ§ μλλ‘ μμ±ν μ μμ΅λλ€.
@Snuffleupagus λ³Όλ§ν whta νμΌμ λν ννΈκ° μμ΅λκΉ?
λ κΉμ΄ λ€μ¬λ€λ³΄μμ΅λλ€. κΈ°ν μμ :-(
λ€μμ regenerator-runtime/runtime.js λ¬Έμ μ λλ€.
λμΌν λ¬Έμ κ° μ¬κΈ°μ μμ΅λλ€.
@Snuffleupagus 2κ°μ κ°λ³ νμΌμ νλλ μ΄μ λΈλΌμ°μ μ©μΌλ‘, λ€λ₯Έ νλλ μλ²κ·Έλ¦° λΈλΌμ°μ μ©μΌλ‘ λ°°ν¬ν μ μμ΅λκΉ?
μΆμ ν μ μ€νΈλ¦Ό λ¬Έμ κ° μμ΅λκΉ? νμ¬ λμΌν λ¬Έμ μ μ§λ©΄
https://github.com/facebook/regeneratorμ λ¬Έμ λ₯Ό λ³΄κ³ ν μ μμ΅λλ€
pdf.js μμ±μκ° μ¬κΈ°μμ μ΄ λ¬Έμ λ₯Ό μμ ν κ² κ°μ΅λλ€.
https://github.com/facebook/regenerator/pull/353
κ·Έλ¬λ babelμ λ¬Έμ λ‘ μΈν΄ λ‘€λ°±ν΄μΌνμ΅λλ€.
https://github.com/facebook/regenerator/pull/369
μ¬κΈ°μ κ΅μ°© μνκ° μλ κ² κ°μ΅λλ€. μ¬κΈ°μ μΈ κ°μ§ μ루μ μ΄ μμ΅λλ€.
facebook/regenerator
μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν λκΉμ§ κΈ°λ€λ¦¬μμμ€.facebook/regenerator
λ€μ΄κ·Έλ μ΄λ(λ°λ²¨λ λ€μ΄κ·Έλ μ΄λν΄μΌ ν¨)facebook/regenerator
κ° νμνμ§ μμ pdf.jsμ μλ²κ·Έλ¦°(ES2016+) λ²μ μ μ 곡ν©λλ€. (νμ¬ λ§μ μΉ μ ν리μΌμ΄μ
μ΄ ES5μ νΈνλ νμκ° μμ΅λλ€).μ΄μ¨λ μ¬κΈ°μ μ λ¬Έμν λ CSP μλ°
https://github.com/facebook/regenerator/blob/6e9e8d7747c2ab49927bdd9dd6261753181faec1/packages/regenerator-runtime/runtime.js#L716 -L725
// This module should not be running in strict mode, so the above
// assignment should always work unless something is misconfigured. Just
// in case runtime.js accidentally runs in strict mode, we can escape
// strict mode using a global Function call. This could conceivably fail
// if a Content Security Policy forbids using Function, but in that case
// the proper solution is to fix the accidental strict mode problem. If
// you've misconfigured your bundler to force strict mode and applied a
// CSP to forbid Function, and you're not willing to fix either of those
// problems, please detail your unique predicament in a GitHub issue.
Function("r", "regeneratorRuntime = r")(runtime);
μ¦, CSP μλ°μ΄ μλ κ²½μ° μ격 λͺ¨λμμ μ€νν΄μλ μ λ©λλ€. μ΄κ²μ μ¬μμ± λ°νμμμ μλ €μ§ λμμ΄λ―λ‘ pdf.jsλ μ격 λͺ¨λλ₯Ό κΊΌμΌ ν©λλ€.
@timvandermeij pdf.jsμ ν μΌμ΄ μλμ§ μλμ§ λκΈ λ€μ μ½μ΄
μ¬κΈ°μμ PDF.jsκ° λ€λ₯΄κ² ν μ μλ κ²μ΄ 무μμΈμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μ£Όμμ΄ λͺ
ννλλΌλ μ€λ₯λ₯Ό λ°©μ§νκ³ μ΅μ νλ₯Ό νμ©νκΈ° μν΄ μλμ μΌλ‘ μ격 λͺ¨λλ‘ PDF.jsλ₯Ό μ€νν©λλ€. μ΄κ²μ΄ μ΄μ μ λ°μνμ§ μμκ³ μ°λ¦¬κ° facebook/regenerator
μ§μ μ¬μ©νμ§λ μλλ€λ μ μ κ°μν λ (κ·Έλ¬λ λ€λ₯Έ ν¨ν€μ§μ μ’
μμ±μΌλ‘λ§) λλ κ·Έκ²λ€μ ν¨μΉν΄μΌ νλ€κ³ λ§νκ³ μΆμ΅λλ€. μ°λ¦¬κ° ν μ μλ μ¬μν λ³κ²½μ΄ μλ€λ©΄/ μ°λ¦¬ μͺ½μμ ν΄μΌ νλλ° κ·Έκ² μ΄λ»κ² λ μ§ λͺ¨λ₯΄κ² μ΄...
@timvandermeij
μμλ΄ μ£Όμ μ κ°μ¬ν©λλ€.
pdf.jsμ babel λ¬΄λ£ λ²μ μ μ΄λ»μ΅λκΉ? μ΅μ λΈλΌμ°μ μλ μ¬μμ± λ°νμ ν΄λ¦¬νμ΄ νμνμ§ μμ΅λλ€.
@jkroepke μ΄μμ μΌλ‘λ Babelμ μ ν μ¬μ©νμ§ μμ κ²μ΄μ§λ§ λΆννλ νμ¬λ‘μλ PDF.jsκ° μ°λ¦¬κ° μ§μνλ λͺ¨λ λΈλΌμ°μ μμ μλν΄μΌ νλ―λ‘ μ κ±°νλ κ²μ μ§κΈ κ³ λ €ν μ μλ μ¬νμ΄ μλλλ€. λ¬Όλ‘ PDF.jsλ₯Ό μ§μ λΉλνκ³ Babel λ³νμ λΉνμ±νν μ μμ΅λλ€.
2.3.200μμλ λμΌν λ¬Έμ κ° λ°μν©λλ€. ν΄κ²° λ°©λ²μ΄λ μμ μ¬νμ΄ μμ΅λκΉ? κ°μ¬ ν΄μ.
@timvandermeij
κ²°κ΅ pdf.jsκ° regenerator-runtime/babelμ μ¬μ©ν λ μ§μλμ§ μλ μ격 λͺ¨λλ₯Ό μ¬μ©νκΈ° λλ¬Έμ μλͺ»νκ³ μμμ μ μ μμ΅λλ€. λ°λΌμ μ ν μ¬νμ΄ μ λ¬Έμνλμ΄ μκΈ° λλ¬Έμ λ μ΄μ μ μ€νΈλ¦Ό λ¬Έμ κ° μλλλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν 4κ°μ§ λμμ΄ μμ΅λλ€.
μ΄μ λ²μ μ babelμ μ¬μ©ν©λλ€. 2.1.266 λ²μ μ pdf.jsμλ μ΄ λ¬Έμ κ° μμ΅λλ€. λ²μ μ κ³ μ νλ©΄ ν΄κ²°λ©λλ€. μ΄κ²μ΄ κ°μ₯ λΉ λ¦ λλ€.
μ΄μ λ²μ μ λν μ’ μμ±μ κ³ μ νλ κ²μ κ²°μ½ μ’μ μκ°μ΄
[...] (https://caniuse.com/#feat=es6-generators)
λͺ
νν νκΈ° μν΄: PDF.js λΌμ΄λΈλ¬λ¦¬λ (νμ¬) μμ±κΈ° ν¨μλ₯Ό μ¬μ©νμ§ μμ§λ§ async
/ await
κ° μ¬μ©λκ³ μμΌλ©° μ΄κ²μ΄ μ΄ νΉμ μ’
μμ±μ΄ μ¬κΈ°μ μ‘΄μ¬νλ μ΄μ μ
λλ€.
λ κ°μ§ λ²μ μ pdfjs-distλ₯Ό μ 곡ν©λλ€. νλλ μ΄μ λΈλΌμ°μ (ES5λ‘ λ³νλ¨)μ©μ΄κ³ λ€λ₯Έ νλλ νμ¬ λΈλΌμ°μ μ©μ λλ€. (ES6μΌλ‘ λ³ν)
μ΄κ²μ μμ μ μ μ€μμ κ°μ₯ νμ€μ μΈ μ΅μ
μ²λΌ 보μ΄μ§λ§ μΈμ /μ΄λ»κ² μΌμ΄λ κ²μΈμ§λ νμμ μμ λͺ
ννμ§ μμ΅λλ€(PR #11241μ ν λ‘ /λ¬Έμ μ°Έκ³ ).
κ·Έλ¬λ λ€μ(μΌλ°) λΉλ μ νλ§ μ 곡λ©λλ€.
μ΅μ ES-{λ²μ }κ³Όλ§ νΈνλλ λΉλ
μ΅μ 2κ°μ μ£Όμ λΈλΌμ°μ λ²μ μμ μ§μνλ κΈ°λ₯/κΈ°μ λ§ μ¬μ©νμκ² μ΅λκΉ?
μ΅μ λΈλΌμ°μ μμ μ§μνμ§ μλ μ΅μ²¨λ¨ μΈμ΄ μ μ κΈ°λ₯μ΄ μλ λ²μ μ λμμ΄ λμ§ μμ΅λλ€.
μ΅μ 2κ°μ μ£Όμ λΈλΌμ°μ λ²μ μμ μ§μνλ κΈ°λ₯/κΈ°μ λ§ μ¬μ©νμκ² μ΅λκΉ?
κ·Έλ κ² νλ €λ©΄ μλ‘ λ€λ₯Έ μΈ κ°μ§ μ νμ λΉλλ₯Ό μμ±ν΄μΌ νλλ°, μ΄λ μ’μ μκ°μ΄ μλ κ² κ°μ΅λλ€. νλλ μ¬μ©μκ° μ΄λ€ λΉλλ₯Ό μ¬μ©ν μ§ ν¨μ¬ λ νΌλμ€λ¬μΈ κ²μ λλ€(μ¬μ©μκ° λ κ°μ§ μ νμ λΉλλ‘λ νμ ν μ μλ€κ³ μμνκΈ° λλ¬Έμ λλ€). λν, μ¬λ¬ λΉλλ₯Ό μ 곡νλ €κ³ νλ©΄ μ§μ λ° μ μ§ κ΄λ¦¬μ κ΄λ ¨νμ¬ μμμ μΌλ° PDF.js κΈ°κ³ μμκ² λ λ§μ λΆλ΄μ΄ κ°ν΄μ§ κ²μ λλ€.
κΈ°λ³Έμ μΌλ‘ λ΄κ° μΌλ €νλ ν μ΄ κ²½μ°μ λ°λμ§ν μν©μ λΌμ΄λΈλ¬λ¦¬ μ¬μ©μ μ€ νλμΌ κ²μ λλ€.
μ΅μ λΈλΌμ°μ μμ μ§μνμ§ μλ μ΅μ²¨λ¨ μΈμ΄ μ μ κΈ°λ₯μ΄ μλ λ²μ μ λμμ΄ λμ§ μμ΅λλ€.
μμ¬μ μΌλ‘ λ§νμλ©΄ Firefox Nightlyμ κ°μ΄ κΈ°λ₯μ΄ μ 곡λλ μ¦μ κΈ°λ₯μ μ¬μ©νκΈ° μμνλ€κ³ μκ°νμ§ μμ΅λλ€. λ°λΌμ μ΄κ²μ΄ μ€μ λ‘ μ€μ λ‘ λ§μ λ¬Έμ κ° λ κ²μ΄λΌκ³ λ μμν μ μμ΅λλ€.
μλ νμΈμ,
λλ κ°μ λ¬Έμ μ λΆλͺμ³€μ΅λλ€. λ΄κ° μ¬μ©ν μ루μ μ μ¬μκΈ° λ°νμ μλ‘λνλ κ²μ΄ μμ΅λλ€. λ΄ polyfillμ μ§μ μκ°νμ΅λλ€.
μ΄ λ°©λ²μΌλ‘ pdfjs-distλ₯Ό λ³κ²½νμ§ μμμ΅λλ€. pdfjsλ₯Ό λ€μ μ»΄νμΌνμ§ μκ³ λ CSP λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€. :)
@makidelille κ°μ μ¬μ©ν©λκΉ?
@makidelille κ°μ μ¬μ©ν©λκΉ?
μ°λ¦¬λ angularjs( μ¬μ ν )λ₯Ό μ¬μ©ν©λλ€.
μ νν λ§νλ©΄ angularjs μ§μλ¬Έμ ν΅ν΄ μ¬μ©λλ pdf.js μμ μ¬μ©μ μ μ λ·°μ΄λ₯Ό ꡬμΆνμ΅λλ€.
νΈμ§: μ¬μ©μ μ μ λ·°μ΄λ typescript angularjsλ‘ λΉλλλ―λ‘ ν΄λ¦¬νμ΄ μμ΅λλ€.
λ€μ μ½λ μ€μμ CSSμ λν λ λ€λ₯Έ μμ νμ§ μμ μΈλΌμΈ μ€λ₯κ° λ°μν©λλ€.
https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js#L893
Refused to apply inline style because it violates the following Content Security Policy directive: "style-src ...". Either the 'unsafe-inline' keyword, a hash ('sha256-MW4Iy/yu3WipUpTMM/T6OjvUu9R6vUwutodlmYNo6qM='), or a nonce ('nonce-...') is required to enable inline execution.
μλ νμΈμ,
λλ κ°μ λ¬Έμ μ λΆλͺμ³€μ΅λλ€. λ΄κ° μ¬μ©ν μ루μ μ μ¬μκΈ° λ°νμ μλ‘λνλ κ²μ΄ μμ΅λλ€. λ΄ polyfillμ μ§μ μκ°νμ΅λλ€.
μ΄ λ°©λ²μΌλ‘ pdfjs-distλ₯Ό λ³κ²½νμ§ μμμ΅λλ€. pdfjsλ₯Ό λ€μ μ»΄νμΌνμ§ μκ³ λ CSP λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€. :)
μ΄ μ루μ μ΄ κ°λ 2+λ‘ μ΄λ»κ² λ³νλλμ§ μκ³ μμ΅λκΉ? μ΄κ²μ κ³ μΉ μ μμ΅λκΉ?
μ λ μ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ μμΌλ©° λμΌν CSP λ¬Έμ μ μ§λ©΄νκ³ μμ΅λλ€(ν΄λΉ νλ‘μ νΈ λ¬Έμ λͺ©λ‘μμ λ΄ ν°μΌμ λ³΄κ³ μΆλ€λ©΄). κ·Έλ¬λ ν¨ν€μ§/npm/μ’ μμ± μ ν νλͺ©μ λν μ΄λ¬ν μ’ λ₯μ λ¬Έμ λ λ΄κ° μ΄ν΄νλ κ²μ΄ μλλλ€. μ.
λΆννλ μ΄ λ¬Έμ κ° μλ μ΄μ λ²μ μ pdfjs(μμμ μΈκΈν 2.1.266)λ μ΄ angular 2+ λνΌ λΌμ΄λΈλ¬λ¦¬μ νΈνλμ§ μλ κ²μΌλ‘ 보μ΄λ©° ν΄λΉ λ²μ μ pdfjsλ₯Ό μ¬μ©νλ λ²μ μ΄ μλ κ²μΌλ‘ 보μ λλ€. λ΄λΆμ μΌλ‘.
νΈμ§ : λμ λΉμ·ν μν©μ μ²ν μ¬λμ μν΄ CSP λ¬Έμ μμ΄ μ μκ² λμμ΄λλ λ λ€λ₯Έ κ°λ pdfjs λνΌ λΌμ΄λΈλ¬λ¦¬κ° μμ΅λλ€. μ¬κΈ°λ₯Ό μ°Έμ‘°
λ€μ λ¦΄λ¦¬μ€ μλ λ κ°μ§ μ’ λ₯μ λΉλκ° ν¬ν¨λλ―λ‘ μ΄ λ¬Έμ λ μ§κΈ μ’ λ£λ μ μλ€κ³ μκ°ν©λλ€.
μ’μ μ리! @Snuffleupagus μκ² κ°μ¬νκ³ λͺ¨λ μ¬λλ€μ΄ μ΄ μμ μ μ°Έμ¬νμ΅λλ€:1st_place_medal:
κ°μ₯ μ μ©ν λκΈ
λ€μ λ¦΄λ¦¬μ€ μλ λ κ°μ§ μ’ λ₯μ λΉλκ° ν¬ν¨λλ―λ‘ μ΄ λ¬Έμ λ μ§κΈ μ’ λ£λ μ μλ€κ³ μκ°ν©λλ€.