He estado usando el método print() de JavaScript para imprimir el contenido de una página. El código no se ha cambiado en 2 años y estaba funcionando en Firefox hasta hace unos días, cuando obtuve la versión 100.0.
Este es el código que he estado usando para imprimir:
print() { const printableElement = Printer.createPrintableElement() const printableContentWindow = printableElement.contentWindow if (!printableContentWindow) { return } const { styles, html } = this.proceedContent() printableContentWindow.document.head.innerHTML = `${styles}` printableContentWindow.document.body.innerHTML = html printableContentWindow.focus() printableContentWindow.print() } static createPrintableElement() { const printableElement = document.createElement('iframe') printableElement.width = '0' printableElement.height = '0' document.body.appendChild(printableElement) return printableElement } static collectPageStyles() { return [...document.querySelectorAll('link[rel="stylesheet"], style')].reduce( (acc, style) => (acc += style.outerHTML), '' ) } filterContentElements() { const { ignoreElements } = this.options const content = this.element if (ignoreElements.length === 0) { return content } ignoreElements.forEach((selector) => { const elementsToDelete = content.querySelectorAll(selector) elementsToDelete.forEach((node) => node.remove()) }) return content } proceedContent() { const styles = Printer.collectPageStyles() const html = this.filterContentElements().innerHTML return { styles, html } }
Intenté depurarlo y me di cuenta de que falla en el método print()
, específicamente en printableContentWindow.print()
. El error que muestra en la consola del navegador es este: Y cuando ocurre, la página a imprimir está completamente en blanco.
Este código funciona perfectamente en Chrome, Opera y Opera GX.
¿Alguna idea de lo que podría estar pasando?