我为ckeditor编写了图像上传器。每次上传文件时,必须将包含图像名称的html文件发送回客户端。
这是我的代码:
router.post('/upload', function (req, res, next) {
var imageName = req.files.upload.name;
var html = "<script type='text/javascript'>" +
"var funcNum = " + req.query.CKEditorFuncNum + "; " +
"var url = \"/images/" + imageName + "\";" +
"window.parent.CKEDITOR.tools.callFunction(funcNum, url);" +
"</script>";
res.send(html);
});
这是一个非常脏的解决方案,因此我创建了以下.hjs文件并相应地映射了值:
<script type='text/javascript'>
var funcNum = {{funcNum}};
var url = "/images/" + {{imageName}};
window.parent.CKEDITOR.tools.callFunction(funcNum, url);
</script>
我的服务器端:
router.post('/upload', function (req, res, next) {
var imageName = req.files.upload.name;
res.render('ckeditor-response', {funcNum: req.query.CKEditorFuncNum, imageName: imageName});
});
这会生成与上面的硬编码解决方案完全相同的html文件,但它不适用于ckeditor。这两种解决方案之间是否存在显着差异?
答案 0 :(得分:4)
您确定[...]This generates exactly the same html file[...]
吗?您应该始终检查最终结果,例如在browser developer-tools的网络选项卡中。
如果imageName
为test.jpg
,则您的第一个代码会创建
var url = "/images/test.jpg";
但是你的hjs
会创建:
var url = "/images/" + test.jpg;
这是一个语法错误。您正在寻找"/images/{{imageName}}";
除此之外,您应该以这样的方式编写回复:
<script type='text/javascript'>
(function() {
var funcNum = {{funcNum}};
var url = "/images/{{imageName}}";
window.parent.CKEDITOR.tools.callFunction(funcNum, url);
}());
</script>
或强>
<script type='text/javascript'>
window.parent.CKEDITOR.tools.callFunction({{funcNum}}, "/images/{{imageName}}");
</script>
否则,您将使用funcNum
和url
污染编辑器窗口的全局命名空间。