在 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,则会出现未定义并显示错误。
我们可以告诉电子打开一个本机窗口来访问它的打开和对文档的访问,所以在你的main.js
or 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
in https://electronjs.org/docs/api/browser-window https://electronjs.org/docs/api/browser-window.