Skip to main content
띄우기 메서드가 반환하는 값이 세션입니다. 세션 하나가 iframe 하나를 담당하고, 그 iframe과 주고받는 모든 메시지를 다룹니다. EditorSession, TnViewSession, PreviewSession은 모두 같은 Session 베이스를 상속하므로 아래 멤버를 공통으로 갖습니다.

클라이언트 만들기

string
default:"https://editor.edicus.io"
편집기 호스트입니다.
() => string | Promise<string>
편집기가 토큰을 다시 요청할 때 SDK가 부를 함수입니다. 토큰 자동 갱신을 보세요.
client.destroy()는 이 클라이언트가 만든 모든 세션을 닫고, 세션들이 함께 쓰던 message 리스너도 제거합니다. 세션 하나만 닫으려면 session.close()를 씁니다. 클라이언트 하나로 여러 세션을 띄울 수 있습니다. 들어온 메시지는 event.source가 어느 세션의 iframe인지 보고 그 세션에만 전달합니다. 어느 세션의 iframe에서도 오지 않은 메시지는 버립니다. 그래서 편집기와 Preview를 동시에 띄워도 메시지가 섞이지 않습니다.

세션 멤버

세션은 항상 동기로 반환됩니다. postMessage는 비동기이므로 반환 직후에 on()을 붙여도 첫 이벤트를 놓치지 않습니다. state는 편집기의 경우 ready-to-listen을 받는 시점에, TnView와 Preview의 경우 첫 메시지를 받는 시점에 'ready'가 됩니다.

세션 종류별 메서드

공통 멤버 말고도 세션 종류마다 전용 메서드가 있습니다. changeProject와 changeTemplate은 post와 달리 type: 'to-edicus-root' 메시지로 나갑니다. 사용법은 편집기 띄우기에 있습니다. TnView 메서드는 TnView와 VDP, Preview 메서드는 Preview 모드를 보세요.

이벤트 받기

핸들러의 두 번째 인자는 원본 메시지(Envelope)입니다. 필요할 때만 받으면 됩니다. 핸들러의 반환값은 무시됩니다. 다만 Promise를 반환하면 세션이 그것이 끝날 때까지 추적하고, waitForExit()가 그 끝을 기다립니다. 자세한 내용은 닫기와 저장 후처리에 있습니다. 추적 중인 Promise가 reject되면 세션이 console.error로 남깁니다. 한 번만 받으면 되는 이벤트는 once나 waitFor를 씁니다.
waitFor는 세션이 닫히거나 타임아웃되면 reject합니다.

알려지지 않은 메시지까지 보기

편집기가 새 action을 보내기 시작했거나, 어떤 이벤트가 오는지 확인하고 싶을 때 씁니다.
dispatch는 on과 once 핸들러를 먼저 실행하고 그다음 onAny를 실행합니다. on('goto-cart') 핸들러 안에서 close()를 부르면 그 자리에서 모든 핸들러가 해제되므로, 같은 메시지에 대한 onAny는 실행되지 않습니다. 종료를 onAny에서 기록하고 계셨다면 그 줄만 조용히 비어 보입니다. 기록이 필요하면 close()보다 먼저 하거나, waitForExit()로 종료를 받고 그 뒤에 닫으세요.

커맨드 보내기

post는 세션 종류의 커맨드 맵으로 타입 지정돼 있어, action 이름을 쓰면 info의 타입이 따라옵니다. on과 waitFor도 같은 방식으로 EditorEventMap, TnViewEventMap, PreviewEventMap에 맞춰 타입이 잡힙니다.

세션 닫기

iframe을 제거하고, 리스너를 해제하고, 대기 중인 waitFor를 전부 reject합니다. 여러 번 불러도 문제없습니다. 사용자가 편집기 안에서 나가기를 눌렀을 때 닫는 흐름은 닫기와 저장 후처리를 보세요. 저장 후처리가 있다면 그냥 close()를 부르면 안 됩니다.

메시지 형식

편집기와 주고받는 메시지는 type과 action과 info를 가진 객체입니다. 직접 다룰 일은 거의 없지만 onAny를 쓸 때 보입니다. EditorSession의 changeProject와 changeTemplate은 예외로 to-edicus-root를 씁니다.
type과 action이 둘 다 문자열인 메시지만 유효한 것으로 봅니다. 페이지의 다른 스크립트가 보낸 postMessage는 조용히 무시됩니다.
type이 from-edicus-private인 메시지는 SDK가 직접 처리합니다. 지연 파라미터를 달라는 요청(waiting-for-extra-param, waiting-for-ddp-data)이 이 채널로 오고, SDK가 띄울 때 받아 둔 값으로 답합니다. 이 메시지는 on에도 onAny에도 오지 않습니다. 지연 파라미터는 띄우기 옵션에 있습니다. postMessage의 targetOrigin은 띄울 때 쓰인 origin(baseUrl의 origin)으로 고정됩니다. v2는 항상 '*'로 보냈었습니다.

함께 내보내는 타입

@edicus/sdk에서 세션과 클라이언트 관련 타입을 가져올 수 있습니다.

다음 단계

편집기 이벤트

편집기가 보내는 모든 이벤트와 payload를 봅니다.

편집기 커맨드

편집기로 보낼 수 있는 모든 커맨드를 봅니다.