в коде ngx-print у нас есть эта часть, чтобы сделать это:
printContents = document.getElementById(this.printSectionId).innerHTML;
popupWin = window.open('_blank', '', 'top=0,left=0,height=100%,width=auto');
popupWin.document.open();
popupWin.document.write("\n <html>\n <head>\n <title>" + (this.printTitle ? this.printTitle : '') + "</title>\n <style>\n " + this.returnStyleValues() + "\n </style>\n </head>\n <body onload=\"window.print();window.close()\">" + printContents + "</body>\n </html>");
popupWin.document.close();
, когда электрон пытается открыть новое окно, он открывает BrowserWindowProxy
, поэтому после этого, если он пытается получить доступ к popupWin.document, онget не определен и показывает ошибку.мы можем сказать электрону, чтобы он открыл собственное окно, чтобы открыть его и открыть документ, поэтому в вашем main.js
или main.ts
вы можете попробовать:
win = new BrowserWindow({
x: 0,
y: 0,
width: size.width,
height: size.height,
webPreferences: {
nativeWindowOpen: true, // add this
nodeIntegration: false
}
});
тогда электрон создаст новоеродное окно.тогда в коде ngx-print
popupWin = window.open('', '_blank', 'top=0,left=0,height=100%,width=auto');
должно быть:
popupWin = window.open('_blank', '', 'top=0,left=0,height=100%,width=auto');
, чтобы открыть новую пустую страницу.Вы можете прочитать больше о webPreferences
в https://electronjs.org/docs/api/browser-window.