gpt4 book ai didi

javascript - 在 JavaFX HTMLEditor 中定位插入符

转载 作者:行者123 更新时间:2023-11-28 07:40:25 25 4
gpt4 key购买 nike

我之前几乎没有做过 JavaScript,所以尝试了多种方法在 JavaFX HTMLEditor 中定位插入符(结束),但没有成功。

例如,我尝试过:contenteditable, set caret at the end of the text (cross-browser)通过添加函数 placeCaretAtEnd(el)<script> -section,类似这样的内容(我在这里省略了 <script> 部分):

<html>
<head>
<style>
</style>
</head>
<body onLoad='document.body.focus();' onfocus='placeCaretAtEnd(document.body);' contenteditable='true'>
</body>
</html>

(我通过 HTMLEditor.setHtmlText 设置)

但是插入符号停留在开头..有人成功地将插入符号放置在 JavaFX HTMLEditor 中吗?

最佳答案

嗯,我终于成功了。我不确定为什么 onfocus 不起作用..

public void requestFocus() {
HTMLEditorSkin skin = (HTMLEditorSkin) editor.getSkin();
try {
Field f = skin.getClass().getDeclaredField("webView");
f.setAccessible(true);
WebView wv = (WebView) f.get(skin);
Platform.runLater(() -> {
wv.requestFocus();
wv.getEngine().executeScript("document.body.focus()");
wv.getEngine().executeScript(
"var el = document.body;\n" +
"if (typeof window.getSelection != \"undefined\"\n" +
" && typeof document.createRange != \"undefined\") {\n" +
" var range = document.createRange();\n" +
" range.selectNodeContents(el);\n" +
" range.collapse(false);\n" +
" var sel = window.getSelection();\n" +
" sel.removeAllRanges();\n" +
" sel.addRange(range);\n" +
" } else if (typeof document.body.createTextRange != \"undefined\") {\n" +
" var textRange = document.body.createTextRange();\n" +
" textRange.moveToElementText(el);\n" +
" textRange.collapse(false);\n" +
" textRange.select();\n" +
" }");
});
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}

关于javascript - 在 JavaFX HTMLEditor 中定位插入符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com