我正在为 Silverstripe CMS 开发一个 TinyMCE 插件,用于在编辑和保存长文本内容后保存和恢复滚动位置。当前的实现可以很好地使用 sessionStorage.setItem('tinymceScrollPosition',scrollPosition); 恢复单个会话中的滚动位置。但是,在不同记录之间切换时我遇到了问题。
问题在于,编辑新记录时会使用上次编辑记录中保存的滚动位置。我知道发生这种情况是因为 sessionStorage 中存储的密钥每条记录不是唯一的。
目标:
我需要为 TinyMCE 编辑器实例创建一个唯一的标识符,以便可以单独为每条记录正确保存和恢复滚动位置。
当前实施:
这是我的插件中的相关代码片段:
(function() {
tinymce.create('tinymce.plugins.scrollposition', {
init:function(ed,url){
// Restore scroll position when TinyMCE is initialized
ed.on('init',function(){
console.log('Editor initialized. Attempting to restore scroll position.');
var savedScrollPosition=sessionStorage.getItem('tinymceScrollPosition');
if(savedScrollPosition!==null){
var iframeWindow=ed.getWin();
iframeWindow.scrollTo(0,parseInt(savedScrollPosition,10));
//console.log('Restored scroll position: '+savedScrollPosition);
sessionStorage.removeItem('tinymceScrollPosition');
}else{
//console.log('No scroll position found in sessionStorage.');
}
});
// Save scroll position when content changes, or the editor loses focus
function saveScrollPosition(){
var iframeWindow=ed.getWin();
var scrollPosition=iframeWindow.scrollY;
sessionStorage.setItem('tinymceScrollPosition',scrollPosition);
//console.log('Saved scroll position: '+scrollPosition);
}
ed.on('NodeChange',saveScrollPosition);
ed.on('blur',saveScrollPosition);
ed.on('PostProcess',saveScrollPosition);
ed.on('BeforeUnload',saveScrollPosition);
},
getInfo:function(){
return{
longname:'Scroll Position Plugin',
author:'',
authorurl:'',
version:"1.0"
};
}
});
tinymce.PluginManager.add('scrollposition',tinymce.plugins.scrollposition);
})();
问题:
如何为每条记录生成TinyMCE编辑器的唯一标识符,以便在记录之间切换时正确保存和恢复滚动位置?任何有关如何修改我当前方法的指导或建议将不胜感激。
其他背景:
我正在使用 Silverstripe 4。 可以使用编辑器 ID (ed.id),但我不确定如何将其唯一地绑定到每条记录。 (来自银条) 我需要避免覆盖不同记录之间的滚动位置。