Я создал настольное приложение с Nativefier , основанным на Eelectron 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();
})
Это нормально работает во всех браузерах в нормальных условиях, но в приложении происходит сбой с ошибкой:
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();
Ведьма заставила меня поверить (это предположение, верно, если я ошибаюсь), проблема в открытии нового окно с предварительным просмотром печати, так как само веб-приложение Chromeless и дизайн для работы только в одном окне.
Теперь, как упоминалось ранее, этот код реализован чуть менее чем в 100 экземплярах с некоторыми вариациями, поэтому для меня было бы большой проблемой изменить его все вместе во всех местах.
Так что мой вопрос Можно ли как-то минимально изменить первый код, показанный выше, чтобы сначала перейти к диалоговому окну печати (пропуская новую часть предварительного просмотра окна)? Так что я могу сделать простой поиск / заменить все файлы.
РЕДАКТИРОВАТЬ: Решение опубликовано как ответ.