Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

292
Vistas
my-component.js: 24 TypeError no detectado: window.open no es una función

Creé un componente web simple usando Vanilla js con solo hacer clic para abrir la URL en una nueva ventana, lamentablemente aparece el siguiente error

my-component.js:24 Uncaught TypeError: window.open is not a function

Aquí está mi componente web:

 export class MyComponent extends HTMLElement { constructor() { super(); } connectedCallback() { this._render(); this._attachEventHandlers(); } _render() { const container = document.createElement("div"); container.innerHTML = ` <div class='app'> <button id="open-me">Open</button> </div>`; const shadowRoot = this.attachShadow({ mode: "open" }); shadowRoot.appendChild(container); } _attachEventHandlers() { this.shadowRoot.getElementById('open-me').addEventListener('click', () => { window.open('www.google.com', "_blank"); }) } } window.customElements.define("my-component", MyComponent);

uso de este componente, solo importe en su HTML y agréguelo así

 <my-component></my-component>

¿Que esta mal aquí?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Yo lo acortaría a:

 customElements.define("my-component", class extends HTMLElement { constructor() { let button = document.createElement("button"); button.innerText = "open"; button.onclick = (evt) => { alert("You clicked! " + evt.target.nodeName); open('www.google.com', "_blank"); }; super().attachShadow({mode:"open"}) .append(button); } });
 <my-component></my-component>

  • No es necesaria una definición de clase con nombre, cuando la usa solo una vez
  • no es necesario export , el componente web se crea en el registro global
  • No hay necesidad de la sopa div , a menos que realmente tengan un propósito.
  • addEventListener solo es necesario cuando desea varios eventos en el mismo elemento
  • window. para customElements , alert y open no son necesarios;
    estamos en el navegador, el valor predeterminado es window
  • super conjuntos Y devuelve el ámbito 'este'; por lo que puede ser encadenado
  • attachShadow establece Y devuelve this.shadowRoot ; por lo que puede ser encadenado
  • Aprenda el poder de append sobre appendChild
    https://developer.mozilla.org/en-US/docs/Web/API/Element/append

Su problema open no puede estar relacionado con los componentes web; verifique esa declaración sin procesar, en la consola.

Aquí en StackOverflow dice:

Posdata por comentarios

OP fue responsable de anular window.open él mismo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda