문서 › 사진과 미디어
링크 카드
주소를 제목·설명·사진이 있는 카드로 보여 주기 (fetchLinkMeta).
주소 하나를 제목, 설명, 대표 사진이 있는 상자로 보여 줍니다. 참고한 글, 상품 페이지, 지도처럼 눌러 볼 곳을 눈에 띄게 할 때 씁니다.
직접 써 보기
툴바의 링크 카드 단추를 누르고 아무 주소나 넣어 보세요. 본문에 주소만 붙여 넣으면 "카드로 보기" 안내도 뜹니다.
이 데모의 코드
createEditor('#editor', {
toolbar: 'linkCard link | undo redo',
// 실제로는 서버에 물어봅니다 (아래 설명 참고)
fetchLinkMeta: async (url) => ({
title: new URL(url).hostname + ' 첫 화면',
description: '서버가 페이지의 og:title, og:description, og:image 를 읽어 돌려준 값입니다.',
image: 'https://picsum.photos/seed/82/400/240',
}),
});넣는 방법
- 툴바의 링크 카드(
linkCard) 단추를 누르고 주소를 넣습니다.https://를 빼먹으면 붙여 줍니다. - 본문에 주소만 붙여 넣으면 링크로 들어가고,
fetchLinkMeta가 있으면 "카드로 보기" 안내가 뜹니다. 누르면 그 링크가 카드로 바뀝니다. 카카오맵·네이버 지도 주소는fetchLinkMeta가 없어도 안내가 뜹니다. - 지도·퍼가기 코드 창에 카카오맵·네이버 지도 주소를 넣으면 카드로 들어갑니다.
fetchLinkMeta: 서버에서 정보 가져오기
브라우저는 보안 규칙 때문에 다른 사이트의 페이지를 읽을 수 없습니다. 그래서 제목과 사진은 내 서버가 대신 읽어 와야 합니다. fetchLinkMeta 가 없거나 null 을 돌려주면 도메인 이름만 있는 카드가 됩니다.
createEditor('#editor', {
toolbar: 'board | linkCard',
fetchLinkMeta: async (url) => {
const res = await fetch('/api/link-meta?url=' + encodeURIComponent(url));
return res.ok ? res.json() : null; // { title, description?, image?, siteName? }
},
});// Node 예: 페이지의 og: 태그 읽기
app.get('/api/link-meta', async (req, res) => {
const url = new URL(req.query.url);
if (!/^https?:$/.test(url.protocol)) return res.status(400).end();
const html = await (await fetch(url, { redirect: 'follow' })).text();
const og = (p) => html.match(new RegExp('<meta[^>]+property=["\']og:' + p + '["\'][^>]+content=["\']([^"\']*)', 'i'))?.[1];
res.json({
title: og('title') ?? html.match(/<title>([^<]*)/i)?.[1] ?? url.hostname,
description: og('description'),
image: og('image'),
siteName: og('site_name'),
});
});저장되는 HTML
<div data-link-card="" style="margin: 0.8em 0">
<a href="https://…" target="_blank" rel="noopener noreferrer" style="display: flex; gap: 14px; …">
<img src="https://…/og.jpg" alt="" style="width: 120px; height: 90px; object-fit: cover; …">
<span style="display: block; min-width: 0">
<strong style="display: block">제목</strong>
<span style="…">설명</span>
<span style="…">사이트 이름</span>
</span>
</a>
</div>제목은 120자, 설명은 160자까지 씁니다. 사진은 http(s) 주소일 때만 들어가고, 사이트 이름이 없으면 도메인을 씁니다. 카드는 새 창으로 열립니다. 에디터 안에서는 한 덩어리로 다뤄집니다.
툴바에서의 위치
linkCard 는 board 와 full 프리셋의 ⋯ 더보기 메뉴에 있습니다.
옵션
| 이름 | 타입 | 기본값 | 설명 |
|---|---|---|---|
linkCard | toolbar item | 주소를 넣어 카드를 만드는 창을 엽니다. | |
fetchLinkMeta | (url) => Promise<LinkMeta | null> | 주소의 제목·설명·사진을 서버에서 가져옵니다. 있으면 주소를 붙여 넣을 때 카드를 권합니다. | |
LinkMeta.title | string | 카드 제목. 비면 도메인. | |
LinkMeta.description | string | 설명 (160자까지). | |
LinkMeta.image | string | 대표 사진 주소 (http/https). | |
LinkMeta.siteName | string | 아래 작은 글씨. 비면 도메인. |