ããã«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ããªãã£ã«ã«ç±æ¥ããŸãã ãã®ãããæ®å¿µãªãããããã§ããã«ã€ããŠäœãã§ãããïŒããããã°ïŒã¯ãŸã£ããæ確ã§ã¯ãããŸããã
ã¯ãã代ããã«ã¢ããã¹ããªãŒã ã§å ±åããå¿ èŠããããšæããŸãã
pdf.jsã®@timvandermeijã³ãŒãã¯ãããªãã£ã«ãäžèŠã«ãªãããã«èšè¿°ã§ããŸãã
@Snuffleupagus whtaãã¡ã€ã«ã«é¢ãããã³ãã¯ãããŸããïŒ
ãããæ·±ã調ã¹ãŸããã ãã£ã³ã¹ã¯ç¡ã ïŒ-ïŒ
ãããåé¡regenerator-runtime / runtime.jsã§ãã
ããã§åãåé¡ã
@Snuffleupagus 2ã€ã®å¥ã ã®ãã¡ã€ã«ãå€ããã©ãŠã¶çšã«1ã€ãåžžç·ãã©ãŠã¶çšã«2ã€é åžããããšã¯å¯èœã§ããïŒ
远跡ããäžæµã®åé¡ã¯ãããŸããïŒ çŸåšåãåé¡ã«çŽé¢ããŠãã
åé¡ã¯https://github.com/facebook/regeneratorã«å ±åã§ã
pdf.jsã®äœè ããã®åé¡ãããã§ä¿®æ£ããããã§ã
https://github.com/facebook/regenerator/pull/353
ããããããã«ã®åé¡ã®ããã«ã圌ãã¯ãããããŒã«ããã¯ããªããã°ãªããŸããã§ãã
https://github.com/facebook/regenerator/pull/369
ããã§ãããããã¯ãçºçããŠããããã§ãã ããã«3ã€ã®è§£æ±ºçããããŸãã
facebook/regenerator
ã§åé¡ã解決ãããŸã§åŸ
ã¡ãŸããfacebook/regenerator
ããŠã³ã°ã¬ãŒãããŸãïŒãããããbabelãããŠã³ã°ã¬ãŒãããå¿
èŠããããŸãïŒfacebook/regenerator
å¿
èŠãšããªãåžžç·æš¹ïŒES2016 +ïŒããŒãžã§ã³ã®pdf.jsãæäŸããŸãã ïŒçŸåšã®Webã¢ããªã±ãŒã·ã§ã³ã®å€ãã¯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éåãããå Žåã¯ããããå³å¯ã¢ãŒãã§å®è¡ããªãã§ãã ããã ããã¯regenerator-runtimeã®æ¢ç¥ã®åäœã§ãããããpdf.jsã§ã¯strict-modeããªãã«ããå¿ èŠããããŸãã
@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ã䜿çšãããšãã«ãµããŒããããŠããªãstrictã¢ãŒãã䜿çšããŠãããããééã£ãŠããããšãããããŸãã ãããã£ãŠãå¶éãååã«ææžåãããŠãããããã¢ããã¹ããªãŒã ã®åé¡ã§ã¯ãªããªããŸããã
ãã®åé¡ã解決ããããã®4ã€ã®éžæè¢ããããŸãã
å€ãããŒãžã§ã³ã®babelã䜿çšããŸãã 2.1.266ããŒãžã§ã³ã®pdf.jsã«ã¯ãã®åé¡ã¯ãããŸããã ããŒãžã§ã³ãåºå®ãããšè§£æ±ºããã¯ãã§ãã ãããæãéãã¯ãã§ãã
å€ãããŒãžã§ã³ãžã®äŸåé¢ä¿ãåºå®ããããšã¯ãŸãããå€ãããŒãžã§ã³ã®Babelã«ã»ãã¥ãªãã£ãã°ãããå Žåããããåé¡ãåŒãèµ·ããå¯èœæ§ãããããã§ãã ããã«ã1ã€ã®äŸåé¢ä¿ã®å€ãããŒãžã§ã³ã䜿çšãããšãä»ã®äŸåé¢ä¿ã®æŽæ°ãé²æ¢ãé 延ãããã³/ãŸãã¯è€éã«ãªããä»ã®åé¡ãçºçããå¯èœæ§ããããŸãã
[...]ïŒhttps://caniuse.com/#feat=es6-generatorsïŒ
æ確ã«ããããã«ïŒ PDF.jsã©ã€ãã©ãªã¯ïŒçŸåšïŒãžã§ãã¬ãŒã¿ãŒé¢æ°ã䜿çšããŠããŸãããã async
/ await
ã䜿çšãããŠããããããã®ç¹å®ã®äŸåé¢ä¿ãããã«ååšããããšã«æ³šæããŠãã ããã
pdfjs-distã®2ã€ã®ããŒãžã§ã³ãæäŸããŸãã 1ã€ã¯å€ããã©ãŠã¶ãŒïŒES5ã«ãã©ã³ã¹ãã€ã«ïŒçšã§ããã1ã€ã¯çŸåšã®ãã©ãŠã¶ãŒçšã§ãã ïŒES6ã«ãã©ã³ã¹ãã€ã«ïŒ
ããã¯äžèšã®ææ¡ã®äžã§æãçŸå®çãªãªãã·ã§ã³ã®ããã«èŠããŸãããããããã€ã©ã®ããã«çºçãããã¯çŸæç¹ã§ã¯æ確ã§ã¯ãããŸããïŒPRïŒ11241ã®è°è«/åé¡ã«æ³šæããŠãã ããïŒã
ãã ãã次ã®ïŒäžè¬çãªïŒçš®é¡ã®ãã«ãã®ã¿ãæäŸãããããšã«æ³šæããŠãã ããã
ææ°ã®ESãšã®ã¿äºææ§ã®ãããã«ã-{ããŒãžã§ã³}
ææ°ã®2ã€ã®äž»èŠãªãã©ãŠã¶ããŒãžã§ã³ã§ãµããŒããããŠããæ©èœ/ãã¯ãããžãŒã®ã¿ã䜿çšããããšãå°éããŸããïŒ
æ°ãããã©ãŠã¶ã§ãµããŒããããŠããªãè¶ æå 端ã®èšèªææ¡æ©èœãåããããŒãžã§ã³ã¯åœ¹ã«ç«ã¡ãŸããã
ææ°ã®2ã€ã®äž»èŠãªãã©ãŠã¶ããŒãžã§ã³ã§ãµããŒããããŠããæ©èœ/ãã¯ãããžãŒã®ã¿ã䜿çšããããšãå°éããŸããïŒ
ããã«ã¯ã 3ã€ã®ç°ãªãã¿ã€ãã®ãã«ããäœæããå¿ èŠããããŸãããããã¯çŽ æŽãããã¢ã€ãã¢ãšã¯æããŸããã 1ã€ã¯ããŠãŒã¶ãŒã¯ã©ã¡ãã®ãã«ãã䜿çšãããã«ã€ããŠããã«æ··ä¹±ããå¯èœæ§ããããŸãïŒ2çš®é¡ã®ãã«ãã ãã§ããŠãŒã¶ãŒã確信ãæãŠãªãããšãæ³åããŠããããïŒã ããã«ãè€æ°ã®ãã«ããæäŸããããšãããšãããã€ãã®éåžžã®PDF.jså¯çš¿è ã«ããµããŒããšã¡ã³ããã³ã¹ã®äž¡æ¹ã«é¢é£ãããªã©ãããå€ãã®è² æ ãããããŸãã
åºæ¬çã«ãç§ã«é¢ããéãããã®å Žåã®æãŸããç¶æ³ã¯ãå³æžé€šã®ãŠãŒã¶ãŒã次ã®ããããã§ãããšããããšã§ãã
æ°ãããã©ãŠã¶ã§ãµããŒããããŠããªãè¶ æå 端ã®èšèªææ¡æ©èœãåããããŒãžã§ã³ã¯åœ¹ã«ç«ã¡ãŸããã
æŽå²çã«èšãã°ãFirefox Nightlyãªã©ã§æ©èœãå©çšå¯èœã«ãªã£ãçŽåŸã«æ©èœã䜿ãå§ããããšã¯ãªããšæããŸãããããã£ãŠããããå®éã«å€§ããªåé¡ã«ãªããšã¯äºæž¬ã§ããŸããã
ããã
ç§ã¯åãåé¡ã«ééããŸãããç§ã䜿çšãã解決çã¯åçåšãããŒã-ã©ã³ã¿ã€ã ã¯ç§ã®ããªãã£ã«ãçŽæ¥èããŸããã
ãã®ããã«ç§ã¯pdfjs-distãå€æŽããŸããã§ããã pdfjsãåã³ã³ãã€ã«ããã«CSPã®åé¡ã解決ããããšãã§ããŸãã:)
@makidelilleAngularã䜿çšããŠããŸããïŒ
@makidelilleAngularã䜿çšããŠããŸããïŒ
ç§ãã¡ã¯angularjsã䜿çšããŸãïŒãŸã ïŒã
æ£ç¢ºã«ã¯ãangularjsãã£ã¬ã¯ãã£ããéããŠäœ¿çšãããpdf.jsã®äžã«ã«ã¹ã¿ã ãã¥ãŒã¢ãæ§ç¯ããŸãã
ç·šéïŒã«ã¹ã¿ã ãã¥ãŒã¢ã¯typescriptangularjsã§æ§ç¯ãããŠãããããããªãã£ã«ããããŸãã
次ã®ã³ãŒãè¡ããã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.
ããã
ç§ã¯åãåé¡ã«ééããŸãããç§ã䜿çšãã解決çã¯åçåšãããŒã-ã©ã³ã¿ã€ã ã¯ç§ã®ããªãã£ã«ãçŽæ¥èããŸããã
ãã®ããã«ç§ã¯pdfjs-distãå€æŽããŸããã§ããã pdfjsãåã³ã³ãã€ã«ããã«CSPã®åé¡ã解決ããããšãã§ããŸãã:)
ããªãïŒãŸãã¯ä»ã®èª°ãïŒã¯ããã®ãœãªã¥ãŒã·ã§ã³ãã©ã®ããã«è§åºŠ2+ã«å€æããããç¥ã£ãŠããŸããïŒ ãããä¿®æ£ããããšã¯å¯èœã§ããïŒ
ç§ã¯ãã®ã©ã€ãã©ãªã䜿çšã
æ®å¿µãªããããã®åé¡ããªãã£ãå€ãããŒãžã§ã³ã®pdfjsïŒäžèšã®2.1.266ïŒã¯ããã®Angular 2+ã©ãããŒã©ã€ãã©ãªãšäºææ§ããªãããã§ããããã®ããŒãžã§ã³ã®pdfjsã䜿çšããããŒãžã§ã³ã¯ãªãããã§ããåãã®ã
ç·šéïŒç§ãšåããããªç¶æ³ã«ãã人ã®ããã«ãCSPã®åé¡ãªãã§ç§ã®ããã«åããå¥ã®è§åºŠã®ããpdfjsã©ãããŒã©ã€ãã©ãªããããŸãã ãã¡ããã芧ãã ããã
ä»åŸã®ãªãªãŒã¹ã«ã¯2çš®é¡ã®ãã«ããå«ãŸããããããã®åé¡ã¯ä»ãã解決ã§ãããšæããŸãã
ããã§ããïŒ @Snuffleupagusã«æè¬ããå šå¡ããã®ïŒ1st_place_medalã«åãçµã¿ãŸããã
æãåèã«ãªãã³ã¡ã³ã
ä»åŸã®ãªãªãŒã¹ã«ã¯2çš®é¡ã®ãã«ããå«ãŸããããããã®åé¡ã¯ä»ãã解決ã§ãããšæããŸãã