Etherpad:如何从 etherpad 捕获选定的文本
Posted
技术标签:
【中文标题】Etherpad:如何从 etherpad 捕获选定的文本【英文标题】:Etherpad: How to capture selected text from etherpad 【发布时间】:2021-11-22 03:33:05 【问题描述】:我想从 Etherpad 捕获选定的文本。有可用的 API 方法 /getText 将返回整个文本。 我的要求是只获取选定的文本。
提前致谢!
【问题讨论】:
【参考方案1】:如果你想在外框使用选中的文本,你可以使用 postMessage 系统。
exports.postAceInit = (hookName, context) =>
window.addEventListener('message', function receiver(e)
// Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
if(data == 'GET_SELECTION')
context.ace.callWithAce((ace) =>
// Read current selection
let rep = ace.ace_getRep();
// Start of the Selection [x,y]
let selStart = rep.selStart;
// End of the Selection [x,y]
let selEnd = rep.selEnd;
// Read Lines of Pad
let lines = rep.lines;
let retVal = '';
// Run through Selection
for(let idx = selStart[0]; idx < selEnd[0]+1; idx++)
retVal = retVal + lines.atIndex(idx).text;
// Send text to Receiver
e.source.postMessage(retVal, origin);
, 'GET_SELECTION', true);
, false);
接收方和发送方站点:
<script type="text/javascript">
function sendMessage(message)
document.getElementById('etherpad').contentWindow.postMessage(message, '_URL OF YOUR ETHERPAD INSTANCE_');
function receiver(e)
// Read Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
alert("GOT: " + data + "\nFROM: " + origin);
e.source.postMessage('Thanks', origin);
// Listener gets Requests
window.addEventListener('message', receiver, false);
</script>
<button type="button" onclick="sendMessage('GET_SELECTION')">GET SELECTION</button>
此代码将从所选内容中获取整行文本。如果您想获得确切的字符,则需要在 idx for-loop 中进行第二个循环
【讨论】:
嗨@Zumpfiii,有没有办法用其他文本替换/修改选定的文本并建立链接? 是的,您只需要使用editorInfo.ace_replaceRange(start, end, text)
函数。但要小心,开始和结束总是数组 [x,y] 就像 rep.selStart 文档链接:etherpad.org/doc/v1.8.14/…
嘿,你把 etherpad 和 react 集成了吗?以上是关于Etherpad:如何从 etherpad 捕获选定的文本的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Sandstorm 上安装 Etherpad Lite 插件?