如何默认给编辑器所有链接添加target={_blank}属性?
解决Lexical编辑器链接强制新标签页打开的方法
要让所有链接默认以_blank打开,无需额外查找setTarget的API位置,通过自定义LinkNode或修改链接渲染逻辑即可实现,具体两种方案:
方案一:自定义LinkNode扩展默认行为
- 继承默认
LinkNode,重写createDOM方法,生成a标签时强制添加target="_blank"和安全属性rel="noopener noreferrer":
import { LinkNode } from '@lexical/link'; class CustomLinkNode extends LinkNode { createDOM(config) { const dom = super.createDOM(config); dom.setAttribute('target', '_blank'); dom.setAttribute('rel', 'noopener noreferrer'); return dom; } }
- 编辑器初始化时,注册自定义节点替换默认
LinkNode:
const initialConfig = { nodes: [CustomLinkNode], // 其他编辑器配置... };
方案二:修改链接创建/编辑逻辑
如果使用官方LinkPlugin,在处理链接提交时可直接调用LinkNode内置的setTarget方法:
import { $createLinkNode } from '@lexical/link'; // 处理链接提交的函数示例 const handleLinkSubmit = (url) => { const linkNode = $createLinkNode(url); linkNode.setTarget('_blank'); // 后续插入或更新节点的逻辑... };
LinkNode本身内置setTarget方法,无需额外添加属性。若要让所有已有、新建链接都生效,方案一的自定义节点方式更彻底。
内容的提问来源于stack exchange,提问作者gikall
相关产品推荐
相关产品推荐

