Viewer.jsã¯ãªã³ã©ã€ã³PDFã¹ããªãŒã ãååŸã§ããŸããã
ããã©ã«ãã§ã¯ãviewer.jsã«ã¯æ¬¡ã®ãã®ããããŸãã
var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';
ããã§PDFã¹ããªãŒã ã䜿çšããŸãã
http://www.liferay.com/documents/31578/11925632/sample.pdf
ãªã®ã§
var kDefaultURL = ' httpïŒ//www.liferay.com/documents/31578/11925632/sample.pdf ';
FireFox9.0.1ããã³Chrome16.0.912.63ã§ã¯ã次ã®ãšã©ãŒãã¹ããŒãããŸãã
ãã
PDF.JSãã«ãïŒ9161c2e
ã¡ãã»ãŒãžïŒäºæããªããµãŒããŒå¿ç0ã
"ã
é¢é£ããåé¡ã¯ãïŒ522ãïŒ586ãããã³ïŒ842ã§ãã
äžèšã®åé¡ã§åç §ãããŠããããã«ãããã¯ãŠãŒã¶ãŒããããã·ãŸãã¯CORSã䜿çšããŠèªåã§ä¿®æ£ããå¿ èŠããããã®ã§ãã
ããã«ã¡ã¯ãã¬ã³ãã
ããŠãŒã¶ãŒããããã·ãŸãã¯CORSã䜿çšããŠèªåã§ä¿®æ£ããå¿ èŠããããäž»ãªçç±ã¯äœã§ããïŒ
PDFãããŒã«ã«ïŒã¢ããããŒãïŒããµãŒããŒããã¡ã€ã«ããµãŒããŒããhttpïŒ//ãã®ãããªã¹ããªãŒã ããååŸã§ããããšãéèŠã§ãã
ç»åã®URLãšããŠãPDFãªãŒããŒã¯HTTPURLããµããŒãããå¿ èŠããããŸãã
ããããšã
@jonasyuandotcom corsã䜿çšãããšãåããµãŒããŒããhttpã䜿çšããŠPDFãååŸã§ããŸãã ãã ãããã©ãŠã¶ã¯ãŠãŒã¶ãŒãå€éšãµãŒããŒãžã®ããŒã¿ã®ååŸ/éä¿¡ããä¿è·ããŸãã ãããã®ãµãŒããŒã¯ããã®å¶éãåé¿ããããã«httpããããŒã䜿çšããå¿ èŠããããŸãã
ãµãŒããŒåŽã®ãããã·ã¯ãã¥ãŒã¢ãšåããµãŒããŒã«é 眮ããããããcorsã¯ããã§åé¡ãããŸããã
@notmasteryetããããšãã ã®ãããªåããµãŒããŒã䜿çšãããšãã«åäœããŸã
var kDefaultURL = '/ pdf-reader-web / sample.pdf';
ããã«ã¡ã¯ãžã§ãã¹ã
ãã©ãŠã¶ã®ã»ãã¥ãªãã£å¶éã®ããã«å®è£ ã§ããªãããããããå®è£ ããããšã¯ãããŸããã http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requestsãåç §ããŠ
ãã¬ã³ãã³
ããã«ã¡ã¯@brendandahl
2011幎以éã«æŽæ°ããããã©ããçåã«æããŸãããïŒ CORSã®åé¡ãä¿®æ£ããããšã¯ãŸã äžå¯èœã§ããïŒ
ã¯ãã 詳现ã«ã€ããŠã¯ã httpsïŒ //github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-xhrãåç §ããŠ
ããããšããã£ã ïŒ
ããã«ã¡ã¯@timvandermeijã ãè¿ä¿¡ããããšãããããŸãã å€ãã®ãœãªã¥ãŒã·ã§ã³ãè©ŠããŸããããWebãµãŒããŒã§CORSãèš±å¯ã§ããŸããã gitã®äŸã¯ãããŸããïŒ
@Dassineããã«è¡ããŸãhttp://mozilla.github.io/pdf.js/web/viewer.html?file=//async5.org/moz/pdfjs.pdf-PDFãã¥ãŒã¢ã¯http://async5.orgãããŒãããŸã
ãã©ãŠã¶ã³ã³ãããŒã«ããã¹ã¯ããã/ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãå Žåã¯ãOS / Framework APIã䜿çšããŠãã€ããªããŒã¿ããªã¯ãšã¹ããããããUint8ArrayãšããŠPDF.jsã«æž¡ãããšãã§ããŸãã
ãªã³ã¯ãããããšã@yurydelendik ã PDF.jsãCORSã管çããŠããªãããšãç§ã¯ç¥ã£ãŠããŸãã @timvandermeijãªã©ããéä¿¡ããããœãªã¥ãŒã·ã§ã³ãè©ŠããŸãããã倱æããŸããã pdf.jsãªããžããªãããŠã³ããŒããããããé©åãªå®è£ /å€æŽãœãªã¥ãŒã·ã§ã³ãæ¢ããŠããŸãã ããããšã
@yurydelendikãªã¢ãŒãPDFãã¡ã€ã«ã®ããŒãã«ãåé¡ããããŸãã ãã ãããã®ãšã©ãŒã¯Chromeã§ã®ã¿çºçããŸãã
PDF.js v1.0.1040ïŒãã«ãïŒ997096fïŒ
ã¡ãã»ãŒãžïŒPDF " http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf "ã®ååŸäžã«äºæããªããµãŒããŒå¿çïŒ0ïŒãçºçããŸããã
ããŒãããããšããŠããPDFããå¶åŸ¡ã§ããªãå¥ã®ãµãŒããŒã«ããããšãããããŸãã ããã§ãããã®PDFãviewer.jsã«è¡šç€ºããããšæããŸã
CORSã®çµéšã¯ããŸããããŸãããããµãŒããŒäžã«ã»ãã¥ãªãã£ãæãäœãcrossdomain.xmlãã¡ã€ã«ãäœæããŸããããããã§ãæ©èœããŸããã
@hashbyteãµãŒããŒã®ãããã·ãå¿ èŠã«ãªããŸãã éåžžã«åçŽãªãããã·ïŒç§ãéçºãããã®ïŒã¯CORSAnywhereã§ãã PDFãã¡ã€ã«ãžã®URLã®åã«ãããã·ã®URLãè¿œå ããã ãã§ãã
"https://cors-anywhere.herokuapp.com/" +
"http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf" =
"https://cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf"
次ã«ããã®URLãURLãšã³ã³ãŒããã file
ãã©ã¡ãŒã¿ãŒã«å
¥ãããšãä»»æã®ããŒãžãéãããšãã§ãããªã³ã¯ã衚瀺ãããŸãïŒ https ïŒ
泚ïŒPDFã®URLã«ããŒã»ã³ãèšå·ã&
æåãå«ãŸããŠããªãå Žåããªã³ã¯ããã°ããååŸããç°¡åãªæ¹æ³ã¯ããªã³ã¯ã®åã«ãã¥ãŒã¢ã®URLãè¿œå ããããšã§ãïŒã€ãŸããæåã«URLãšã³ã³ãŒãã䜿çšããªãã§ãã ããïŒã ïŒã ããã¯ãURLãæåã§å
¥åããå Žåã«ã®ã¿å®è¡ããŠãã ããïŒããšãã°ãã¯ã€ãã¯ãã¹ããå®è¡ããå ŽåïŒã
https://mozilla.github.io/pdf.js/web/viewer.html?file=httpsïŒ//cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal ã pdf
æ³šïŒ CORS Anywhereãã¢ã¯ãæ©èœããã¢ã³ã¹ãã¬ãŒã·ã§ã³ããããã«ã®ã¿æäŸãããŠããŸãã 蚪åè
ãå€ããµã€ãã§ãã®æ©èœã䜿çšããå Žåã¯ããããªãã¯ãã¢ãµãŒããŒã«äžåœãªè² è·ããããªãããã«ãCORSAnywhereã€ã³ã¹ã¿ã³ã¹ãèªåã§ãã¹ãããŠãã ããã æªçšã«ããCORSAnywhereã®ããã©ãŒãã³ã¹ãã¯ããŒã«ããŠããããšã«æ°ä»ããå Žåããªãªãžã³ã¯ãã©ãã¯ãªã¹ãã«ç»é²ãããŸãã CORS Anywhereãèªåã§ãã¹ãããå Žåã¯ããã®çš®ã®æªçšãåé¿ããããã«ã originWhitelist
æ§æãã©ã¡ãŒã¿ãŒãä»ããŠã®ã¿ãµã€ããžã®ã¢ã¯ã»ã¹ãå¶éã§ããŸãã
ããã«ã¡ã¯ã
å€åœã®URLããPDFãããŒãããããšãã«ãã®ãšã©ãŒãçºçããŸã
ãšã©ãŒïŒãã¡ã€ã«ã®åºæããã¥ãŒã¢ã®åºæãšäžèŽããŸãã
æ°ãããšã©ãŒãã¹ããŒããŸãïŒ 'ãã¡ã€ã«ã®åºæããã¥ãŒã¢ãšäžèŽããŸãã\' s 'ïŒ;
å©ããŠãã ããïŒ
å€åœã®URLããPDFãããŒãããããšãã«ãã®ãšã©ãŒãçºçããŸã
@gildassamuel詳现ã«ã€ããŠã¯ãïŒ6916ãåç §ããŠãã ããã
@jonasyuandotcomãã¡ã€ã«ãèªåã§ç®¡çããå Žåã¯ããã¡ã€ã«ãšpdfjsãåããã¡ã€ã«ãµãŒããŒã«çœ®ãããšãã§ããŸãã
ã¡ãã£ãšç§ã¯ãã¡ã€ã«ãµãŒããŒã«ãAccess-Control-Allow-Originããèšå®ããããã®æ瀺ã«åŸããŸããããç§ã¯ãã®ãšã©ãŒãåãåãç¶ããŸãïŒ
httpããããŒã¯æ¬¡ã®ãšããã§ãã
åé¡ã®èããããåå ãç¹å®ã§ãããã©ããããããªãå Žåã§ãããã€ã³ã¿ãããã ããã°å¹žãã§ãã ã©ããããããšãããããŸããïŒ
@yjguooãšã©ãŒã¡ãã»ãŒãžãšããããŒã
ãªãã€ã¬ã¯ãã¿ãŒã²ããã«æåŸ ãããããããŒãäžè¶³ããŠãããšæããŸãã
chrome://net-internals/#events
ã¢ã¯ã»ã¹ããæé ãç¹°ãè¿ããŠããããã¯ããããªãã€ã¬ã¯ãã®å®éã®ããããŒããã°ã«è¡šç€ºããŸãã
ããã«ã¡ã¯ããã¯è¿ éãªå¯Ÿå¿ã«æè¬ããŸãã
èŠæ±ãããURLãhttps://files.dev52.slack.com/files-pri/T076SHX5W-F07CGBKK2/git-for-beginners-handout.pdfããæåã§å
¥åãããšããã¡ã€ã«ãµãŒããŒããç°ãªãå¿çããããŒãè¿ãããŸãã
å¿çããããŒã®å¥ã®å Žæã«ã«ãŒãã£ã³ã°ãããŠããããšã«æ³šæããŠãã ããã ãããŠããã®æ°ããå Žæã§ãã¹ããŒã¿ã¹200okãååŸããŸãã
ç§ã®æåã®è³ªåïŒãã©ãŠã¶ã«URLãæåã§å
¥åããããšãšãXmlHttpRequestã䜿çšããããšã«ã¯éãããããŸããïŒ
ãšããã§ãç§ã¯ããã©ã«ãã®pdf.jsãã¥ãŒã¢ïŒhtml css jsïŒã䜿çšããŠããŸãããç°ãªããªãªãžã³ããã®pdfãèŠæ±ããããšãé€ããŠããã¹ãŠã®æ©èœãæ©èœããŸãïŒei cross oring request issueïŒ
2çªç®ã®è³ªåïŒããã¯ç§ã®åŽã®åé¡ã ãšæããŸããããããšãããã©ã«ãã®viewer.js /pdf.jsãXmlHttpRequestãå®è¡ããŠããæ¹æ³ã«åé¡ããããšæããŸãã
ããããšã ïŒïŒ
ç§ã®æåã®è³ªåïŒãã©ãŠã¶ã«URLãæåã§å ¥åããããšãšãXmlHttpRequestã䜿çšããããšã«ã¯éãããããŸããïŒ
ã¯ããç¹ã«ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã®å Žåã¯ããã§ãã ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ããå®è¡ãããšããªã¯ãšã¹ãã¯CORSã«ãã£ãŠèš±å¯ãããŠããå Žåã«ã®ã¿åãå
¥ããããŸãã ãã©ãŠã¶ã¯Origin
ããããŒã䜿çšããŠãªã¯ãšã¹ããçºè¡ãããµãŒããŒã¯ããã䜿çšããŠãªã¯ãšã¹ããæ¿èªãããã©ããã決å®ã§ããŸãïŒãªã¯ãšã¹ããããçºä¿¡å
ãAccess-Control-Allow-Origin
å¿çããããŒã«å«ããããšã«ããïŒã
ãŸããããã©ã«ãã§ã¯ãã¯ã¬ãã³ã·ã£ã«ã¯ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã«å«ãŸããŠããŸããã Cookieãå«ããã«ã¯ããµãŒããŒãAccess-Control-Allow-Credentials: true
å¿çããXHRãªã¯ãšã¹ãã§withCredentials
å±æ§ãtrue
èšå®ãããŠããå¿
èŠããããŸãã
2çªç®ã®è³ªåïŒããã¯ç§ã®åŽã®åé¡ã ãšæããŸããããããšãããã©ã«ãã®viewer.js /pdf.jsãXmlHttpRequestãå®è¡ããŠããæ¹æ³ã«åé¡ããããšæããŸãã
ãµãŒããŒã®æ§æãå€ããå¿ èŠããããšæããŸãã
詳现ã«ã€ããŠã¯ãMDNã®ããã¥ã¡ã³ããåç
§ããŠãã ããïŒ https ïŒ
ãŸãã¯ãCORSã®ä»æ§ããèªã¿ãã ããïŒ //www.w3.org/TR/2014/REC-cors-20140116/
ããã«ã¡ã¯ããã
Access-Control-Allow-Credentials: true
ãèšå®ããŠåé¡ã解決ãããšæããŸãã å©ããŠãããŠããããšã<3ã ãã ãããªãã€ã¬ã¯ãã«é¢ããŠå¥ã®åé¡ãçºçãããã€ã³ã¿ãæããŠãããããã©ããããããŸããã XHRãå®è¡ããŸã
URLïŒ1ã䜿çšããŠãªã¯ãšã¹ãããŸãïŒä¿®æ£ã«åœ¹ç«ã€åé¡ïŒã 次ã«ãURLïŒ2ïŒã¹ããŒã¿ã¹302ïŒãžã®ãªãã€ã¬ã¯ããååŸããŸãã ãã ããURLïŒ1ãšURLïŒ2ã¯ã©ã¡ããåããµãŒããŒãæããŠããŸãã 次ã®ãšã©ãŒãçºçããŸãã
URLïŒ1ã«å¯ŸããŠè¡ã£ãã®ãšåãå¿çããããŒãèšå®ããããšããŸããããäž¡æ¹ãšãåããµãŒããŒäžã«ãããOriginãnullã§ããããšãããããŸããã
äž¡æ¹ã®URLãåããµãŒããŒãæããŠããããããªãã€ã¬ã¯ãå ãNULLã§ããããã ãšæããŸãããããããããŸãããïŒ æ¬¡ã«ã2ã€ã®ç°ãªããªãªãžã³ãåŠçããããããŒãè¿œå ããã«ã¯ã©ãããã°ããã§ããããããã ããäž¡æ¹ã®URLãåããã¡ã€ã«ãµãŒããŒãæããŠããŸãã *ã®ãããªæ£èŠè¡šçŸã䜿çšããŠã¿ãŸããããã©ãããèš±å¯ãããŠããŸãã:(ããäžåºŠããããšãããããŸãïŒ
ã¯ãã¹ãªãªãžã³ãªãã€ã¬ã¯ãã®åŸãChromeã¯OriginããããŒãå®éã®URLã§ã¯ãªããnullãå€ã«èšå®ããŸã-httpsïŒ//crbug.com/154967
æ¡ä»¶ä»ãã§Access-Control-Allow-Origin
ãå€null
ã§è¿ãããšãã§ããŸãããããã¯ãã¹ãŠã®Webãµã€ãããã®ãªãœãŒã¹ãèªã¿åããããã«ããå Žåã«éããŸãã ããã§ãªãå ŽåïŒæãå¯èœæ§ãé«ãïŒããªãã€ã¬ã¯ããåé¿ããå¿
èŠããããŸãã ããšãã°ããªã¯ãšã¹ããå®å
URLã«çŽæ¥éä¿¡ããŸãïŒäºåã«URLãããããªãå Žåã¯ãå®å
URLãè¿ãæ°ããAPIãšã³ããã€ã³ãããµãŒããŒã«è¿œå ããŸãïŒã
ããããšãïŒ ç§ã¯ããã調ã¹ãŸã:)
ã¡ãã£ãšããããªãã¯ããã§ã«èšå®ãããsrcã§pdfãã¥ãŒã¢ãŸãã¯pdf.jsãåæåããXHRãªã¯ãšã¹ãããã¹ãŠäžç·ã«åé¿ããå¥ã®æ¹æ³ããããšæããŸããïŒ
@yjguoo PDFããŒã¿ãbase64ã§ãšã³ã³ãŒãããããŒã¿URLã䜿çšã§ããŸãã 倧ããªPDFãã¡ã€ã«ã®å Žåãbase64ãšããŠããŒã¿ããšã³ã³ãŒããããšãã¡ã€ã«ãµã€ãºã33ïŒ å¢å ããããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžããŸãïŒ=ããã°ã¬ã¹ããŒã®ãªã空çœã®ããŒãžïŒã ãã®ãããXHRãåŒãç¶ã䜿çšããããšããå§ãããŸãã
ããã«ã¡ã¯ããã¹ãããã°ããã§ãCORSãæå¹ã«ãªã£ãŠããå Žåã¯æ©èœããŸããããã¡ã€ã«ãéåžžã«å€§ããå Žåããã¡ã€ã«ããã£ã³ã¯/ç¯å²ã§ååŸãããªãããšãããããŸãã
ããã.htaccessã«è¿œå ããŠè§£æ±ºããŸããïŒ
ããããŒã»ããAccept-Rangesãã€ã
ããããŒã»ããAccess-Control-Allow-Origin "*"
ããããŒã»ããAccess-Control-Allow-Methods "GET"
ããããŒã»ããAccess-Control-Allow-Headers "Content-TypeãRange"
ããããŒã»ããAccess-Control-Expose-Headers "Accept-RangesãContent-EncodingãContent-LengthãContent-Range"
ããããšãïŒïŒïŒ
@ Rob--WãšãŠãå©ãããŸããã ãããžã§ã¯ãå ããæ©èœããå¯èœæ§ã¯ãããŸããïŒXHRããããŒã®å€æŽãªã©ïŒïŒ ïŒworker.jså ïŒ
ããã«ã¡ã¯ããŸã ããã«åé¡ããã人ã®ããã«ãç§ã¯ããã次ã®ããã«è§£æ±ºããŸããïŒ
https://drive.google.com/viewerng/viewer?embedded=true&url=http://www.africau.edu/images/default/sample.pdf
æãåèã«ãªãã³ã¡ã³ã
@hashbyteãµãŒããŒã®ãããã·ãå¿ èŠã«ãªããŸãã éåžžã«åçŽãªãããã·ïŒç§ãéçºãããã®ïŒã¯CORSAnywhereã§ãã PDFãã¡ã€ã«ãžã®URLã®åã«ãããã·ã®URLãè¿œå ããã ãã§ãã
次ã«ããã®URLãURLãšã³ã³ãŒããã
file
ãã©ã¡ãŒã¿ãŒã«å ¥ãããšãä»»æã®ããŒãžãéãããšãã§ãããªã³ã¯ã衚瀺ãããŸãïŒ https ïŒæ³šïŒPDFã®URLã«ããŒã»ã³ãèšå·ã
&
æåãå«ãŸããŠããªãå Žåããªã³ã¯ããã°ããååŸããç°¡åãªæ¹æ³ã¯ããªã³ã¯ã®åã«ãã¥ãŒã¢ã®URLãè¿œå ããããšã§ãïŒã€ãŸããæåã«URLãšã³ã³ãŒãã䜿çšããªãã§ãã ããïŒã ïŒã ããã¯ãURLãæåã§å ¥åããå Žåã«ã®ã¿å®è¡ããŠãã ããïŒããšãã°ãã¯ã€ãã¯ãã¹ããå®è¡ããå ŽåïŒãhttps://mozilla.github.io/pdf.js/web/viewer.html?file=httpsïŒ//cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal ã pdf
æ³šïŒ CORS Anywhereãã¢ã¯ãæ©èœããã¢ã³ã¹ãã¬ãŒã·ã§ã³ããããã«ã®ã¿æäŸãããŠããŸãã 蚪åè ãå€ããµã€ãã§ãã®æ©èœã䜿çšããå Žåã¯ããããªãã¯ãã¢ãµãŒããŒã«äžåœãªè² è·ããããªãããã«ãCORSAnywhereã€ã³ã¹ã¿ã³ã¹ãèªåã§ãã¹ãããŠãã ããã æªçšã«ããCORSAnywhereã®ããã©ãŒãã³ã¹ãã¯ããŒã«ããŠããããšã«æ°ä»ããå Žåããªãªãžã³ã¯ãã©ãã¯ãªã¹ãã«ç»é²ãããŸãã CORS Anywhereãèªåã§ãã¹ãããå Žåã¯ããã®çš®ã®æªçšãåé¿ããããã«ã
originWhitelist
æ§æãã©ã¡ãŒã¿ãŒãä»ããŠã®ã¿ãµã€ããžã®ã¢ã¯ã»ã¹ãå¶éã§ããŸãã