如何通过覆盖Odoo.define中的函数来禁用Odoo JavaScript净化
How to disable Odoo JavaScript sanitization by overriding functions from odoo.define
Odoo 9中有一个所见即所得编辑器,它在任何空行上添加<p>
标记,并用它们包围几乎每一行。这完全破坏了模板。因此,如果你有一个很好的电子邮件模板,例如你的发票电子邮件,即使你在发送之前没有手动编辑任何内容,他们也会被这个编辑器清除。
我们如何禁用所见即所得编辑器的这种行为?
编辑
有问题的函数是text_to_html
,可以在addons/web_editor/static/src/js/backend.js
中找到。你可以通过简单地将其剥离为这样的东西来禁用它的过度行为:
text_to_html: function (text) {
var value = text || "";
return value;
}
但是,在核心文件中这样做将在下一次更新时覆盖更改。所以我现在的问题是,从自定义模块覆盖这个函数的正确方法是什么。我熟悉添加新模型的基本Odoo模块,但我不确定如何覆盖odoo.define
定义的Odoo JavaScript,到目前为止还没有找到相关文档。
派对迟到了一点,但如果这对某人有帮助的话。。。
首先,它已经在ODOO GitHub存储库中修复了,下面使用的代码就是从那里开始的。如果你能更新ODOO。如果不能,您应该创建新的模块并将其安装在ODOO中。如果你不知道如何参考文档。
将包含以下内容的JavaScript文件放入模块:
odoo.define('web_editor_sanitize_fix.backend', function (require) {
'use strict';
var core = require('web.core');
var backend = require('web_editor.backend');
backend.FieldTextHtmlSimple.include({
text_to_html: function (text) {
var value = text || "";
try {
$(text)[0].innerHTML;
return text;
} catch (e) {
if (value.match(/^'s*$/)) {
value = '<p><br/></p>';
} else {
value = "<p>"+value.split(/<br'/?>/).join("<br/></p><p>")+"</p>";
value = value.replace(/<p><'/p>/g, '').replace('<p><p>', '<p>').replace('<p><p ', '<p ').replace('</p></p>', '</p>');
}
}
return value;
}
});
});
我还没有测试代码,但它应该可以工作。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 如何在Odoo 9中执行JS文件中的函数
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 如何通过覆盖Odoo.define中的函数来禁用Odoo JavaScript净化
- Odoo 8 POS模块.订单行扩展了一个函数
- 如何在Odoo 10中每次调用python函数
- 从JavaScript函数返回数组值(odoo)
- 如何调用on_menu_about();Odoo 9中UserMenu.js函数