我正在开发一个 chrome 扩展,它用扩展文本替换缩写。我正在处理 CKEditor5 的一个具体案例。 由于 CKEditor 实例仅在后台执行世界“MAIN”中的脚本时可用,因此我在那里执行此脚本:
function injectScript(text, shortcut) {
const ckEditorElement = document.querySelector('.ck-editor__editable');
const ckEditorInstance = ckEditorElement?.ckeditorInstance;
if (ckEditorInstance) {
ckEditorInstance.model.change( writer => {
const insertPosition = ckEditorInstance.model.document.selection.getFirstPosition();
const selectionAttributes = ckEditorInstance.model.document.selection.getAttributes();
// Delete the last `shortcut.length` characters before inserting content
ckEditorInstance.model.insertContent( writer.createText( text, selectionAttributes ), insertPosition );
});
}
}
我不知道如何在插入扩展文本之前删除缩写。
例如:如果我写
//brb
,我想删除该缩写并将其替换为 be right back
。目前我得到类似 //brbe right back
的信息,因为我还没弄清楚如何删除它。
我尝试在文档中找到的模型上使用此功能 https://ckeditor.com/docs/ckeditor5/latest/api/module_engine_model_model-Model.html#function-deleteContent但我不知道这是否是正确的函数以及如何使用它。
我自己找到了解决方案。
const startPosition = insertPosition.getShiftedBy(-shortcut.length);
const range = writer.createRange(startPosition, insertPosition);
const selection = writer.createSelection(range);
ckEditorInstance.model.deleteContent(selection);
getShiftedBy
deleteContent
函数。