diff --git a/src/browser/renderer/dom/DomRenderer.ts b/src/browser/renderer/dom/DomRenderer.ts index a01c2208..9082e36b 100644 --- a/src/browser/renderer/dom/DomRenderer.ts +++ b/src/browser/renderer/dom/DomRenderer.ts @@ -95,10 +95,14 @@ export class DomRenderer extends Disposable implements IRenderer { public dispose(): void { this._element.classList.remove(TERMINAL_CLASS_PREFIX + this._terminalClass); - this._screenElement.removeChild(this._rowContainer); - this._screenElement.removeChild(this._selectionContainer); - this._screenElement.removeChild(this._themeStyleElement); - this._screenElement.removeChild(this._dimensionsStyleElement); + + // Outside influences such as React unmounts may manipulate the DOM before our disposal. + // https://github.com/xtermjs/xterm.js/issues/2960 + this._rowContainer.parentElement?.removeChild(this._rowContainer); + this._selectionContainer.parentElement?.removeChild(this._selectionContainer); + this._themeStyleElement.parentElement?.removeChild(this._themeStyleElement); + this._dimensionsStyleElement.parentElement?.removeChild(this._dimensionsStyleElement); + super.dispose(); }