首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子/本地化Web应用程序-新窗口打印问题[HTML,JS]

电子/本地化Web应用程序-新窗口打印问题[HTML,JS]
EN

Stack Overflow用户
提问于 2020-03-30 21:37:49
回答 2查看 793关注 0票数 1

我已经用Nativefier构建了一个基于电子JS的桌面应用程序。我遇到了打印问题,一个问题只有在尝试打开一个新窗口并预览打印时才会出现。

我有很多表,每个表都附加了下面的代码,以使它们可以打印(略有差异):

代码语言:javascript
复制
    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中,它失败时出错:

代码语言:javascript
复制
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);

但是,这段代码工作正常,并立即启动一个打印对话框:

代码语言:javascript
复制
function myFunction() {
  window.print();

这让我相信(这是猜测,如果我错了的话),问题是打开一个带有打印预览的新窗口,因为Web本身是无铬的,并且只在一个窗口中工作。

现在,正如前面提到的,这个代码在稍微少一点的100个实例中实现,并且有一些变化,所以在所有位置一起修改它将是一个很大的问题。

因此,我的问题是,上面显示的第一段代码是否可以以最小的方式被修改为先跳转到打印对话框(跳过新的窗口预览部分)?所以我可以做简单的搜索/替换所有的文件。

编辑:解决方案发布为答复.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 09:40:27

找到了解决办法。

代码语言:javascript
复制
htmlToPrint += divToPrint.outerHTML;
newWin = window.document.write(htmlToPrint);
window.print();
location.reload();

我不开新窗户。在当前我打开一个文档并在其中写表格,打开一个窗口打印对话框并保存为PDF或打印它。关闭它后,位置将自动重新加载并关闭新文档,并返回表页。

工作于浏览器和应用程序。

票数 0
EN

Stack Overflow用户

发布于 2020-03-30 23:13:16

我对"Nativefier“不是很熟悉,但是我想newWin变量没有像"document”这样的属性,错误就是这么说的。但是有了电子,您可以使用webContents方法- executeJavascript

代码语言:javascript
复制
// 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>'
  `)
    }
  })
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60939931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档