ace-editor - Document.write 和 ace 编辑器
问题描述
我尝试在文档重写引擎中使用 Ace 编辑器。ace 编辑器如下所示:
运行document.write
基本上重写页面后,我得到以下信息,但在 javascript 控制台上没有错误:
我无法解释为什么我需要 document.write,我只是想找到一种方法来完成这项工作。看起来 ace 在页面重新加载后会自行中断。
这是最小复制示例:
<html>
<head>
<script>
function loadAceEditor() {
var aceeditor = ace.edit("aceeditor");
aceeditor.setValue(document.getElementById("aceeditor").getAttribute("initdata"));
}
</script>
<script id="acescript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.2/ace.js" async></script>
</head>
<body>
<div id="aceeditor" style="width:100%;height:100%" initdata="test {}"></div>
<script>
onAceLoaded = (delay) => () => {
if(typeof ace != "undefined" && document.querySelector("#aceeditor")) {
loadAceEditor();
setTimeout(() => {
document.open();
document.write(`
<html>
<head>
</head>
<body>
<div id="aceeditor" initdata="testended {}"></div>
<script>
onAceLoaded = (delay) => () => {
if(typeof ace != "undefined") {
loadAceEditor();
} else {
setTimeout(onAceLoaded(delay * 2), delay);
}
}
onAceLoaded(1)();
</${"script"}>
</body>
</html>`);
document.close();
}, 3000)
} else {
setTimeout(onAceLoaded(delay * 2), delay);
}
}
onAceLoaded(1)();
</script>
</body>
</html>
编辑
document.write
这与加载 ace.js 后调用的事实有关。
解决方案
好的,实际上,王牌编辑器正在添加以下内容
<style id="ace_editor.css">...</style>
在 HEAD 第一次加载,而不是第二次。重新插入这个元素就成功了。
推荐阅读
- node.js - POST 请求更改为在 AWS ElasticBeanstalk 上运行的 ExpressJS 应用程序上的 GET 请求
- python - 正则表达式 - 用相同数量的“#”替换模式变得非常慢
- java - 向量的实际用途是什么?
- discord - 如何检测用户何时加入语音频道?
- bash - 为什么用 `read -r -a line` 拆分我的 $PATH 有效,但不能用 `while read -r line` 拆分?
- python - 努力让这个 GUI 工作并给我一个可以选择图像的组合框界面
- react-native - React Native:带有 flex 的 ScrollView 和布局元素
- angular - 我可以在 mat-select 中发出不同的值吗?
- postgresql - 容器化数据库文件路径和根目录未知
- asp.net-core - 运行时基于对象属性值的动态 XML 元素名称