Ir al contenido
Odoo Menú
  • Iniciar sesión
  • Pruébalo gratis
  • Aplicaciones
    Finanzas
    • Contabilidad
    • Facturación
    • Gastos
    • Hoja de cálculo (BI)
    • Documentos
    • Firma electrónica
    Ventas
    • CRM
    • Ventas
    • TPV para tiendas
    • TPV para restaurantes
    • Suscripciones
    • Alquiler
    Sitios web
    • Creador de sitios web
    • Comercio electrónico
    • Blog
    • Foro
    • Chat en directo
    • e-learning
    Cadena de suministro
    • Inventario
    • Fabricación
    • PLM
    • Compra
    • Mantenimiento
    • Calidad
    Recursos Humanos
    • Empleados
    • Reclutamiento
    • Ausencias
    • Evaluación
    • Referencias
    • Flota
    Marketing
    • Marketing social
    • Marketing por correo electrónico
    • Marketing por SMS
    • Eventos
    • Automatización de marketing
    • Encuestas
    Servicios
    • Proyecto
    • Partes de horas
    • Servicio de campo
    • Servicio de asistencia
    • Planificación
    • Citas
    Productividad
    • Conversaciones
    • Inteligencia artificial
    • IoT
    • VoIP
    • Información
    • WhatsApp
    Aplicaciones de terceros Studio de Odoo Plataforma de Odoo Cloud
  • Sectores
    Comercio al por menor
    • Librería
    • Tienda de ropa
    • Tienda de muebles
    • Tienda de ultramarinos
    • Ferretería
    • Juguetería
    Alimentación y hostelería
    • Bar y pub
    • Restaurante
    • Comida rápida
    • Casa de huéspedes
    • Distribuidor de bebidas
    • Hotel
    Inmueble
    • Agencia inmobiliaria
    • Estudio de arquitectura
    • Construcción
    • Gestión inmobiliaria
    • Jardinería
    • Asociación de propietarios
    Consultoría
    • Asesoría contable
    • Partner de Odoo
    • Agencia de marketing
    • Bufete de abogados
    • Adquisición de talentos
    • Auditorías y certificaciones
    Fabricación
    • Textil
    • Metal
    • Muebles
    • Alimentos
    • Cervecería
    • Regalos corporativos
    Salud y bienestar
    • Club deportivo
    • Óptica
    • Gimnasio
    • Especialistas en bienestar
    • Farmacia
    • Peluquería
    Oficios
    • Servicios de mantenimiento
    • Hardware y soporte técnico
    • Sistemas de energía solar
    • Zapatero
    • Servicios de limpieza
    • Servicios de calefacción, ventilación y aire acondicionado
    Otros
    • Organización sin ánimo de lucro
    • Agencia de protección del medio ambiente
    • Alquiler de vallas publicitarias
    • Estudio fotográfico
    • Alquiler de bicicletas
    • Distribuidor de software
    Explorar todos los sectores
  • Comunidad
    Aprender
    • Tutoriales
    • Documentación
    • Certificaciones
    • Formación
    • Blog
    • Podcast
    Potenciar la educación
    • Programa de formación
    • Scale Up! El juego empresarial
    • Visita Odoo
    Obtener el software
    • Descargar
    • Comparar ediciones
    • Versiones
    Colaborar
    • GitHub
    • Foro
    • Eventos
    • Traducciones
    • Convertirse en partner
    • Servicios para partners
    • Registrar tu asesoría contable
    Obtener servicios
    • Encontrar un partner
    • Encontrar un asesor fiscal
    • Contacta con un experto
    • Servicios de implementación
    • Referencias de clientes
    • Ayuda
    • Actualizaciones
    GitHub YouTube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Solicitar una demostración
  • Precios
  • Ayuda
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Sobre este foro
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Sobre este foro
Ayuda

How to Run JavaScript Inside HTML Fields in Odoo 17?

Suscribirse

Reciba una notificación cuando haya actividad en esta publicación

Esta pregunta ha sido marcada
javascriptwizardodoo 17
2 Respuestas
5176 Vistas
Avatar
Jacky

Hi everyone,

I'm trying to include JavaScript inside an HTML field in Odoo 17, but the script doesn't seem to execute. Here's the code I'm working with:

Copy code

html_field = fields.HTML("HTML Data", sanitize=False, compute="_compute_html") def _compute_html(self): self.html_field = """<script>console.log('TEST')</script>"""

The HTML field is defined as a computed field, and I have set sanitize=False to allow raw HTML. However, when I load the view, the JavaScript inside the <script> tag does not run.

The reason I need this is to call a modal or wizard dynamically in my custom form template. The data for the form is fetched using custom logic with PostgreSQL queries, so I was hoping to inject the JavaScript for triggering the modal or wizard directly into the HTML field.

Does Odoo block scripts in HTML fields by design? If so, how can I achieve this functionality? Is there a recommended way to include JavaScript for modals or wizards in custom templates while still leveraging Odoo's framework?

Any guidance would be greatly appreciated!

0
Avatar
Descartar
Avatar
Cybrosys Techno Solutions Pvt.Ltd
Mejor respuesta

Hi,

Yes, Odoo blocks JavaScript execution inside HTML fields by design, even if you set sanitize=False. This is primarily for security reasons, to prevent XSS (Cross-Site Scripting) vulnerabilities.

Why <script> Doesn’t Work:


Even though you're using sanitize=False, Odoo’s rendering engine and modern browsers strip or ignore script tags in HTML fields for safety. This behavior is expected and intended.

Recommended Alternatives:


If you need to trigger modals or wizards dynamically, there are better and safer ways to do this in Odoo:

1. Use t-att-onclick or JS event binding in QWeb templates


Instead of injecting JS directly, attach an event handler to an element:


<button type="button" class="btn btn-primary" t-att-onclick="'trigger_modal(%d)' % record.id">Open Modal</button>


Then define the JS function trigger_modal() in your custom JS file loaded via assets.

2. Use @odoo-module JS to handle events


Create a custom JavaScript module that listens for button clicks and triggers a modal or action:


/** @odoo-module **/


import { Component } from "@odoo/owl";

import { registry } from "@web/core/registry";


class MyModalComponent extends Component {

    setup() {

        // modal logic here

    }

}


registry.category("actions").add("my_module.my_modal_action", MyModalComponent);


Then trigger it from Python or with do_action in JS.

3. Use do_action() in JS


If you're in a web context (e.g. custom JS), use:



this.do_action({

    type: 'ir.actions.act_window',

    res_model: 'your.model',

    view_mode: 'form',

    target: 'new',

});


This opens a wizard/modal cleanly and in line with Odoo standards.


While injecting JS into an HTML field might seem like a shortcut, it's not recommended and won’t work reliably in Odoo 17 due to built-in restrictions. Instead, use Odoo's JS framework and do_action() to build interactive features like modals or wizards.


Hope it helps

0
Avatar
Descartar
Avatar
buynest.in, Akhilesh N S
Mejor respuesta

Even though you've set sanitize=False on the HTML field, Odoo may still be applying some additional sanitization or escaping to the HTML content, which could prevent the script from running

To achieve the functionality you're looking for, you can consider use of an Odoo Widget with JavaScript

You can find the example from module im_livechat

script_external = fields.Html( 'Script (external)' , compute = '_compute_script_external' , store = False , readonly = True , sanitize = False )

def _compute_script_external(self):
values = {
"dbname": self._cr.dbname,
}
for record in self:


values["channel_id"] = record.id
values["url"] = record.get_base_url()
record.script_external = self.env['ir.qweb']._render('im_livechat.external_loader', values) if record.id else False
<template id ="external_loader" name ="Livechat : external_script field of livechat channel" > 
<!-- the loader -->
<script t-attf-src ="{{url}}/im_livechat/loader/{{channel_id }}" type ="text/javascript" />
<!-- js of all the required lib (internal and external) -->
<script t-attf-src ="{{url}}/im_livechat/assets_embed.js " type ="text/javascript" />
</template>
0
Avatar
Descartar
¿Le interesa esta conversación? ¡Participe en ella!

Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.

Inscribirse
Publicaciones relacionadas Respuestas Vistas Actividad
Open a wizard when clicking on "save" in a form in edit mode [Odoo 9]
javascript wizard odoo9
Avatar
0
ago 16
576
Unable to display CogMenuItem only in specific views
javascript views actions odoo 17
Avatar
0
abr 25
2395
How can i inherit from the save button of a wizard at Odoo 17. Resuelto
wizard inheritance leaves odoo 17
Avatar
Avatar
1
sept 25
2664
Widget to many2many widget
javascript wizard many2many many2many_tags
Avatar
0
mar 21
4608
How to call a wizard from a systray button in Odoo 12? Resuelto
javascript wizard odoo12.0 systray
Avatar
Avatar
1
ago 19
8012
Comunidad
  • Tutoriales
  • Documentación
  • Foro
Código abierto
  • Descargar
  • GitHub
  • Runbot
  • Traducciones
Servicios
  • Alojamiento Odoo.sh
  • Ayuda
  • Actualizar
  • Desarrollos personalizados
  • Educación
  • Encontrar un asesor fiscal
  • Encontrar un partner
  • Convertirse en partner
Sobre nosotros
  • Nuestra empresa
  • Activos de marca
  • Contacta con nosotros
  • Puestos de trabajo
  • Eventos
  • Podcast
  • Blog
  • Clientes
  • Información legal • Privacidad
  • Seguridad
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk Slovenščina Español (América Latina) Español Svenska ภาษาไทย Türkçe українська Tiếng Việt

Odoo es un conjunto de aplicaciones empresariales de código abierto que cubre todas las necesidades de tu empresa: CRM, comercio electrónico, contabilidad, inventario, punto de venta, gestión de proyectos, etc.

La propuesta única de valor de Odoo es ser muy fácil de usar y estar totalmente integrado.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now