已隐藏内容
AlphaPilot program
已隐藏内容(策略禁止读取的内容)会被占位符替换。使用 renderRedaction 控制其外观和交互。
已隐藏节点不可编辑,包括其类型、属性和内容。这会在事务层面强制执行,而不只是设置 contenteditable="false"。请参阅读取限制。
ContentProtection.configure({
policy,
renderRedaction: ({ inline, label }) => {
const dom = document.createElement(inline ? 'span' : 'div')
dom.className = 'restricted-content'
dom.textContent = `🔒 ${label}`
return { dom }
},
})选项
renderRedaction(RedactionRenderer | null):占位符工厂函数。默认值为null,使用内置视图。redactionText(string):默认可见文本、可访问名称和中性的剪贴板输出。默认值为'[Hidden content]',不能为空。
RedactionRenderer
类型为 (props: RedactionViewProps) => RedactionView 的同步工厂函数。
参数(RedactionViewProps)
key(string):已挂载区域的不透明标识。它不是文档 ID、位置或内容查找键。inline(boolean):视图必须放入文本行内时为true。text(string):配置的redactionText。label(string):默认可访问名称;与redactionText的值相同。
属性中不包含原始内容、节点、位置、长度、规则 ID 或 Editor 实例。
返回值(RedactionView)
dom(HTMLElement):全新的、未挂载的根元素。行内视图必须包含兼容行内布局的元素。update?((props: RedactionViewProps) => boolean):更新现有视图。返回true可复用视图,返回false则重新创建。没有此方法时,更新会重新创建视图。destroy?(() => void):视图被移除、替换或编辑器销毁时,清理监听器、框架根和 portal。
渲染行为
- 扩展会挂载根元素,并设置
contenteditable="false"和data-content-protection="redacted"。 - 在自定义根元素上设置
aria-label或aria-labelledby可提供可访问名称。否则扩展会使用redactionText。 - 根元素可以包含按钮和其他交互控件,但不能提供可编辑文档内容或
contentDOM。 - 隐藏节点不会挂载原始 NodeView。隐藏可见节点会销毁其原始视图。
- 行内/块上下文发生变化时会重新创建占位符。
- 无效视图或渲染器失败时会回退到默认占位符,绝不会显示原始内容。
- 框架渲染器使用其常规的挂载/更新/卸载 API。在
destroy中清理;这不是ReactNodeViewRenderer。 - 请求访问的控件由应用负责。使用
setContentProtectionPolicy更改访问权限。
剪贴板和导出
- 复制使用
redactionText和中性的 HTML,不使用自定义视图的 DOM、标签或控件。 - 如果选中内容中有任何部分无法删除,则剪切会被拒绝;剪贴板保持不变。
- 拖动会检查源和目标权限,并使用可读的剪贴板输出。
getReadableContent返回展示树和文本。它不会调用renderRedaction;请显式传入自定义redactionText。- 部分隐藏的 Slot 会从剪贴板输出中省略其配置。
editor.getJSON()和editor.getHTML()仍包含完整文档。对于必须省略隐藏内容的输出,请使用可读投影。
自定义渲染只会改变视图。完整源文档仍保留在客户端内存中;应用侧边栏和导出功能必须应用相同的读取权限。