Pdf.js: [email protected]의 μ•ˆμ „ν•˜μ§€ μ•Šμ€ 인라인에 λŒ€ν•œ CSP μœ„λ°˜

에 λ§Œλ“  2019λ…„ 08μ›” 02일  Β·  24μ½”λ©˜νŠΈ  Β·  좜처: mozilla/pdf.js

여기에 PDF νŒŒμΌμ„ 첨뢀(ꢌμž₯)ν•˜κ±°λ‚˜ 링크:

ꡬ성:

  • Chrome 버전 76.0.3809.87(곡식 λΉŒλ“œ)(64λΉ„νŠΈ)
  • μš°λΆ„νˆ¬ 18.04.2 LTS(λ°”μ΄μ˜€λ‹‰ 비버)
  • PDF.js 버전: pdfjs-dist v2.2.228
  • λΈŒλΌμš°μ € ν™•μž₯자: μ•„λ‹ˆμš”

문제λ₯Ό μž¬ν˜„ν•˜λŠ” 단계:
unsafe-inline λ°©μ§€ν•˜λŠ” μ½˜ν…μΈ  λ³΄μ•ˆ 정책이 μžˆμŠ΅λ‹ˆλ‹€.
v2.2.228 Function("r", "regeneratorRuntime = r")(runtime);

μΆ”κ°€ 정보:
μœ μ‚¬ν•œ 문제 #10229

1-other

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€μŒ 릴리슀 μ—λŠ” 두 가지 μ’…λ₯˜μ˜ λΉŒλ“œκ°€ ν¬ν•¨λ˜λ―€λ‘œ 이 λ¬Έμ œλŠ” μ§€κΈˆ μ’…λ£Œλ  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  • Babel둜 트랜슀파일 λ˜μ§€ μ•Šκ³  ν¬ν•¨λœ 폴리필이 μ—†λŠ” μ΅œμ‹  λΉŒλ“œ(μ΅œμ‹  λΈŒλΌμš°μ €μš©)μž…λ‹ˆλ‹€.
  • Babel둜 트랜슀파일되고 ν•„μš”ν•œ λͺ¨λ“  폴리필을 ν¬ν•¨ν•˜λŠ” ES5 ν˜Έν™˜ λΉŒλ“œ(예: IE11μ—μ„œ μ‚¬μš©ν•  수 있음).

λͺ¨λ“  24 λŒ“κΈ€

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 이 문제λ₯Ό ν•΄κ²°ν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬μ‹­μ‹œμ˜€.
    κ°€μž₯ λͺ…ν™•ν•  수 μžˆμ§€λ§Œ λ§Žμ€ μ‚¬μš©μžκ°€ pdf.js의 이전 버전을 κ³ μˆ˜ν•  κ²ƒμž…λ‹ˆλ‹€.
  • facebook/regenerator λ‹€μš΄κ·Έλ ˆμ΄λ“œ(바벨도 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•΄μ•Ό 함)
  • ν˜„μž¬ ES5에 μΆ”κ°€λ‘œ 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μ—λŠ” 이 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. 버전을 κ³ μ •ν•˜λ©΄ ν•΄κ²°λ©λ‹ˆλ‹€. 이것이 κ°€μž₯ λΉ λ¦…λ‹ˆλ‹€.
  • babel의 쒅속성이 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 엄격 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
  • regenerator-runtime을 μ‚¬μš©ν•˜μ—¬ 트랜슀파일 ν”ŒλŸ¬κ·ΈμΈμ„ λ•λ‹ˆλ‹€. (https://caniuse.com/#feat=es6-generators)
  • 두 가지 λ²„μ „μ˜ pdfjs-distλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν•˜λ‚˜λŠ” 이전 λΈŒλΌμš°μ €(ES5둜 λ³€ν™˜λ¨)용이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” ν˜„μž¬ λΈŒλΌμš°μ €μš©μž…λ‹ˆλ‹€. (ES6으둜 λ³€ν™˜)

이전 λ²„μ „μ˜ babel을 μ‚¬μš©ν•©λ‹ˆλ‹€. 2.1.266 λ²„μ „μ˜ pdf.jsμ—λŠ” 이 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. 버전을 κ³ μ •ν•˜λ©΄ ν•΄κ²°λ©λ‹ˆλ‹€. 이것이 κ°€μž₯ λΉ λ¦…λ‹ˆλ‹€.

이전 버전에 λŒ€ν•œ 쒅속성을 κ³ μ •ν•˜λŠ” 것은 κ²°μ½” 쒋은 생각이

[...] (https://caniuse.com/#feat=es6-generators)

λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄: PDF.js λΌμ΄λΈŒλŸ¬λ¦¬λŠ” (ν˜„μž¬) 생성기 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ§€λ§Œ async / await κ°€ μ‚¬μš©λ˜κ³  있으며 이것이 이 νŠΉμ • 쒅속성이 여기에 μ‘΄μž¬ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€.

두 가지 λ²„μ „μ˜ pdfjs-distλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν•˜λ‚˜λŠ” 이전 λΈŒλΌμš°μ €(ES5둜 λ³€ν™˜λ¨)용이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” ν˜„μž¬ λΈŒλΌμš°μ €μš©μž…λ‹ˆλ‹€. (ES6으둜 λ³€ν™˜)

이것은 μœ„μ˜ μ œμ•ˆ μ€‘μ—μ„œ κ°€μž₯ ν˜„μ‹€μ μΈ μ˜΅μ…˜μ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μ–Έμ œ/μ–΄λ–»κ²Œ 일어날 κ²ƒμΈμ§€λŠ” ν˜„μ‹œμ μ—μ„œ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(PR #11241의 ν† λ‘ /문제 μ°Έκ³ ).
κ·ΈλŸ¬λ‚˜ λ‹€μŒ(일반) λΉŒλ“œ μœ ν˜•λ§Œ μ œκ³΅λ©λ‹ˆλ‹€.

  • κ·Έ μ‹œκ°„μ— ν•  μˆ˜μžˆλŠ” μ–΄λ–€ μ΅œμ‹  ES-{버전}κ³Ό 만 ν˜Έν™˜ λΉŒλ“œ, 즉 λ‚΄μž₯ 된 νŒŒμΌμ€ 바벨을 톡해 μ‹€ν–‰λ˜μ§€ μ•Šκ³  polyfills은 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ES5와 ν˜Έν™˜λ˜λŠ” λΉŒλ“œ, 즉 λΉŒλ“œλœ νŒŒμΌμ€ Babel에 μ˜ν•΄ ꡬ문 λΆ„μ„λ˜κ³  폴리필이 ν¬ν•¨λ©λ‹ˆλ‹€.

μ΅œμ‹  ES-{버전}과만 ν˜Έν™˜λ˜λŠ” λΉŒλ“œ

μ΅œμ‹  2개의 μ£Όμš” λΈŒλΌμš°μ € λ²„μ „μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯/기술만 μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ΅œμ‹  λΈŒλΌμš°μ €μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ΅œμ²¨λ‹¨ μ–Έμ–΄ μ œμ•ˆ κΈ°λŠ₯이 μžˆλŠ” 버전은 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΅œμ‹  2개의 μ£Όμš” λΈŒλΌμš°μ € λ²„μ „μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯/기술만 μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

κ·Έλ ‡κ²Œ ν•˜λ €λ©΄ μ„œλ‘œ λ‹€λ₯Έ μ„Έ 가지 μœ ν˜•μ˜ λΉŒλ“œλ₯Ό 생성해야 ν•˜λŠ”λ°, μ΄λŠ” 쒋은 생각이 μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€. ν•˜λ‚˜λŠ” μ‚¬μš©μžκ°€ μ–΄λ–€ λΉŒλ“œλ₯Ό μ‚¬μš©ν• μ§€ 훨씬 더 ν˜Όλž€μŠ€λŸ¬μšΈ κ²ƒμž…λ‹ˆλ‹€(μ‚¬μš©μžκ°€ 두 가지 μœ ν˜•μ˜ λΉŒλ“œλ‘œλ„ ν™•μ‹ ν•  수 μ—†λ‹€κ³  μƒμƒν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€). λ˜ν•œ, μ—¬λŸ¬ λΉŒλ“œλ₯Ό μ œκ³΅ν•˜λ €κ³  ν•˜λ©΄ 지원 및 μœ μ§€ 관리와 κ΄€λ ¨ν•˜μ—¬ μ†Œμˆ˜μ˜ 일반 PDF.js κΈ°κ³ μžμ—κ²Œ 더 λ§Žμ€ 뢀담이 κ°€ν•΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€.

기본적으둜 λ‚΄κ°€ μ—Όλ €ν•˜λŠ” ν•œ 이 경우의 λ°”λžŒμ§ν•œ 상황은 라이브러리 μ‚¬μš©μž 쀑 ν•˜λ‚˜μΌ κ²ƒμž…λ‹ˆλ‹€.

  • ES μ΅œμ‹  λΉŒλ“œλ₯Ό μ„ νƒν•˜κ³  지원해야 ν•˜λŠ” ν”Œλž«νΌ/λΈŒλΌμš°μ €μ— 따라 ν•„μš”μ— 따라 폴리필을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • ES5 λΉŒλ“œλ₯Ό μ„ νƒν•˜κ³  ν•„μš”ν•œ λͺ¨λ“  폴리필을 ν¬ν•¨ν•˜κ³  "λͺ¨λ“ " μ΅œμ‹  λΈŒλΌμš°μ €μ™€ ν˜Έν™˜λ˜λŠ” μ½”λ“œλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

μ΅œμ‹  λΈŒλΌμš°μ €μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ΅œμ²¨λ‹¨ μ–Έμ–΄ μ œμ•ˆ κΈ°λŠ₯이 μžˆλŠ” 버전은 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—­μ‚¬μ μœΌλ‘œ λ§ν•˜μžλ©΄ 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 래퍼 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°λ₯Ό μ°Έμ‘°

λ‹€μŒ 릴리슀 μ—λŠ” 두 가지 μ’…λ₯˜μ˜ λΉŒλ“œκ°€ ν¬ν•¨λ˜λ―€λ‘œ 이 λ¬Έμ œλŠ” μ§€κΈˆ μ’…λ£Œλ  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  • Babel둜 트랜슀파일 λ˜μ§€ μ•Šκ³  ν¬ν•¨λœ 폴리필이 μ—†λŠ” μ΅œμ‹  λΉŒλ“œ(μ΅œμ‹  λΈŒλΌμš°μ €μš©)μž…λ‹ˆλ‹€.
  • Babel둜 트랜슀파일되고 ν•„μš”ν•œ λͺ¨λ“  폴리필을 ν¬ν•¨ν•˜λŠ” ES5 ν˜Έν™˜ λΉŒλ“œ(예: IE11μ—μ„œ μ‚¬μš©ν•  수 있음).

쒋은 μ†Œλ¦¬! @Snuffleupagus μ—κ²Œ κ°μ‚¬ν•˜κ³  λͺ¨λ“  μ‚¬λžŒλ“€μ΄ 이 μž‘μ—…μ— μ°Έμ—¬ν–ˆμŠ΅λ‹ˆλ‹€:1st_place_medal:

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰