문서 목차

서버 연동

Web Office

고급 — SDK 직접 삽입

뷰어 SDK를 고객사 페이지에 직접 로드하는 방식입니다. iframe 안 DOM을 직접 조작해야 하는 경우에만 사용하세요.

대부분의 경우 필요 없습니다. 이 방식은 고객사 페이지 전체가 격리되어 광고·SSO 팝업·서드파티 iframe이 동작하지 않을 수 있습니다. 먼저 임베드 방식을 검토하세요.

서버 헤더 (필수)

페이지를 내려주는 서버가 아래 두 헤더를 반드시 설정해야 합니다. 없으면 requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer 오류가 납니다.

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: credentialless

nginx

add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "credentialless" always;

Apache

Header always set Cross-Origin-Opener-Policy "same-origin"
Header always set Cross-Origin-Embedder-Policy "credentialless"

Spring (Servlet Filter)

response.setHeader("Cross-Origin-Opener-Policy", "same-origin");
response.setHeader("Cross-Origin-Embedder-Policy", "credentialless");

Express

app.use((req, res, next) => {
  res.set("Cross-Origin-Opener-Policy", "same-origin");
  res.set("Cross-Origin-Embedder-Policy", "credentialless");
  next();
});

IIS (web.config)

<httpProtocol><customHeaders>
  <add name="Cross-Origin-Opener-Policy" value="same-origin" />
  <add name="Cross-Origin-Embedder-Policy" value="credentialless" />
</customHeaders></httpProtocol>

SDK 로드와 뷰어 생성

viewer.open()은 URL이 아니라 ArrayBuffer를 받습니다.

<script src="https://cdn.dragdocs.com/crepas-viewer@2.1.0/dist/crepas-viewer.min.js?clientId=XXXX-XXXX-XXXX-XXXX-XXXX"></script>
<script>
  const CrepasViewer = window.CrepasViewer?.create ? window.CrepasViewer : window.CrepasViewer?.default;
  const viewer = CrepasViewer.create(document.getElementById("viewer"), { theme: "light", officeViewer: { mode: "standard" } });
  const buffer = await (await fetch("/api/documents/123/content")).arrayBuffer();
  await viewer.open(buffer, "계약서.pdf", "application/pdf");
</script>
window.SharedArrayBuffer = ArrayBuffer 같은 폴백은 넣지 마세요. 엔진에 스레드를 쓸 수 있다고 잘못 알려 위 오류를 유발합니다.