我已经用Nativefier构建了一个基于电子JS的桌面应用程序。我遇到了打印问题,一个问题只有在尝试打开一个新窗口并预览打印时才会出现。
我有很多表,每个表都附加了下面的代码,以使它们可以打印(略有差异):
function printData3()
{
var divToPrint=document.getElementById("myTable");
var htmlToPrint = '' +
'<style type="text/css">' +
'table th, table td {' +
'border:1px solid #000;' +
'padding:0.5em;' +
'}' +
'</style>';
htmlToPrint += divToPrint.outerHTML;
newWin = window.open("");
newWin.document.write(htmlToPrint);
newWin.print(htmlToPrint);
newWin.close();
}
$(document.getElementById("print-pred")).on('click',function(){
printData3();
})在正常情况下,这在所有浏览器上都能正常工作,但在app中,它失败时出错:
Uncaught TypeError: Cannot read property 'write' of undefined
at printData3 (rad.php:1373)
at HTMLButtonElement.<anonymous> (rad.php:1379)
at HTMLButtonElement.dispatch (jquery.min.js:2)
at HTMLButtonElement.v.handle (jquery.min.js:2)该错误行引用:来自上面所示代码的newWin.document.write(htmlToPrint);。
但是,这段代码工作正常,并立即启动一个打印对话框:
function myFunction() {
window.print();这让我相信(这是猜测,如果我错了的话),问题是打开一个带有打印预览的新窗口,因为Web本身是无铬的,并且只在一个窗口中工作。
现在,正如前面提到的,这个代码在稍微少一点的100个实例中实现,并且有一些变化,所以在所有位置一起修改它将是一个很大的问题。
因此,我的问题是,上面显示的第一段代码是否可以以最小的方式被修改为先跳转到打印对话框(跳过新的窗口预览部分)?所以我可以做简单的搜索/替换所有的文件。
编辑:解决方案发布为答复.
发布于 2020-03-31 09:40:27
找到了解决办法。
htmlToPrint += divToPrint.outerHTML;
newWin = window.document.write(htmlToPrint);
window.print();
location.reload();我不开新窗户。在当前我打开一个文档并在其中写表格,打开一个窗口打印对话框并保存为PDF或打印它。关闭它后,位置将自动重新加载并关闭新文档,并返回表页。
工作于浏览器和应用程序。
发布于 2020-03-30 23:13:16
我对"Nativefier“不是很熟悉,但是我想newWin变量没有像"document”这样的属性,错误就是这么说的。但是有了电子,您可以使用webContents方法- executeJavascript
// Warning: pure Electron, no add-ons or something like Nativefier
const { app, BrowserWindow } = require('electron')
const path = require('path')
app.once('ready', () => {
var mainWindow = new BrowserWindow()
mainWindow.loadURL(path.join(__dirname, 'index.html'))
mainWindow.webContents.executeJavaScript(`
document.getElementById("list").innerHTML += '<h1>Hey Wassup</h1>'
`)
}
})
})https://stackoverflow.com/questions/60939931
复制相似问题