在您的网站上讨论
把代码贴进页面,讨论区块就出现在容器所在的位置。其余一切都活在我们的框架里:您的标记、样式和脚本都保持原样。
在你的页面上试一下
现成的代码
<div data-vpvd-thread data-url="https://example.org/article" data-lang="zh-Hans" data-theme="auto"> <a href="https://vpvd.io/embed/zh-Hans?url=https%3A%2F%2Fexample.org%2Farticle&theme=auto" target="_blank" rel="noopener">在 vpvd 上打开讨论</a> </div> <script src="https://vpvd.io/embed.js" async referrerpolicy="no-referrer"></script>
读者会看到什么
放在哪里
- 静态站点和自建模板
- WordPress
- Tilda
- Next.js, Nuxt, React
<div data-vpvd-thread data-url="https://example.org/article" data-lang="zh-Hans" data-theme="auto"> <a href="https://vpvd.io/embed/zh-Hans?url=https%3A%2F%2Fexample.org%2Farticle&theme=auto" target="_blank" rel="noopener">在 vpvd 上打开讨论</a> </div> <script src="https://vpvd.io/embed.js" async referrerpolicy="no-referrer"></script>
Next.js, Nuxt, React
// components/VpvdThread.tsx — one page's discussion. Load the script once in the layout:
// <Script src="https://vpvd.io/embed.js" strategy="afterInteractive" />
'use client';
import { useEffect, useRef } from 'react';
export default function VpvdThread() {
const box = useRef<HTMLDivElement>(null);
useEffect(() => {
const el = box.current;
const vpvd = (window as any).vpvd;
if (el && vpvd) vpvd.mount(el);
return () => { if (el && vpvd) vpvd.destroy(el); };
}, []);
return (
<div ref={box} data-vpvd-thread data-url="https://example.org/article" data-lang="zh-Hans" data-theme="auto">
<a href="https://vpvd.io/embed/zh-Hans?url=https%3A%2F%2Fexample.org%2Farticle&theme=auto" target="_blank" rel="noopener">在 vpvd 上打开讨论</a>
</div>
);
} 不重新加载就换页的站点
// after every client-side transition: window.vpvd.refresh();
主题与字体
属性
data-url- 被讨论页面的地址。讨论绑定在它上面,所以对所有读者必须是同一个。
data-lang- 区块的语言,取下面列表中的一种。任何其他值都会返回 404:其他语言没有这个框。
en— Englishzh-Hans— 简体中文es— Españolar— العربيةru— Русскийvi— Tiếng Việttr— Türkçefa— فارسی
data-theme- 区块主题:自动(同你的页面)、浅色或深色。
data-height- 在框报告自己的高度之前为区块预留的高度,单位像素,例如 200。之后区块按真实高度对齐,取值保持在 120–2000 之间。页面上看得出跳动就把它设上:默认预留 160 像素。
有新评论时
列表用的评论数
代码不做什么
确认已经嵌入
- 框在位:加载器已经用它替换了容器里的备用链接
- 加载器跑起来了:下面的值已经存在,版本是 1
window.vpvd - 框报了自己的高度:这个数不再是预留的 160,区块和讨论对齐了
// 1
document.querySelector('iframe[data-vpvd-frame]')
// 2
window.vpvd.version
// 3
document.querySelector('iframe[data-vpvd-frame]').style.height 您网站上的严格策略
script-src— 区块的脚本从这里来frame-src— 讨论本身在我们的框架里显示child-src→frame-src— 如果你的策略里写了它,管住框的就是它而不是那条通用指令:来自别的来源的一个值会安静地挡掉页面上所有框,包括我们的。把我们地址也写进这条——或者把它删掉。