Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!