Я использую кнопки "Datatables": extend: print ", чтобы напечатать таблицу.
Когда я нажимаю кнопку «Печать», она открывает новую вкладку браузера с таблицей и отображает диалоговое окно печати Firefox, чего я и ожидаю, но также сбрасывает cookie-файл JSESSIONID, что означает, что пользователь фактически вышел из системы. Пользователь вынужден снова войти в систему, когда он попытается нажать обновить или перейти на другую страницу.
Если я пытаюсь экспортировать PDF (через extend: 'pdf'
), он работает нормально. Проблема возникает только для печати и только в Firefox. Сессия не теряется ни в Safari, ни в Chrome. Я использую Firefox 68.0, но это также происходило в 67 (я не тестировал более ранние версии).
Не имеет значения, если stateSave
равно true
, false
или опущено.
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs/dt-1.10.18/datatables.min.css"/>
<script type="text/javascript" src="https://cdn.datatables.net/v/bs/dt-1.10.18/datatables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.5.6/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.5.6/js/buttons.print.min.js"></script>
function init() {
$.fn.dataTable.moment( 'DD/MM/YYYY' );
$.fn.dataTable.moment( 'MM/DD/YYYY' );
$.fn.dataTable.moment( 'MMM D, YYYY' );
dtApi = $('.mydatatableclass').DataTable( {
"pageLength": 50,
"lengthChange": false,
"order": [[ 1, "asc" ]],
stateSave: true,
"columnDefs": [
{ "visible": false, "targets": 10 },
{ "orderable": false, "targets": [0,3,8,9] }
],
buttons: [
{
extend: 'print',
exportOptions: {
columns: [1,2,4,5,6,7,10]
}
}
]
} );
<a href="#" onclick="$('.mydatatableclass').DataTable().button( '.buttons-print' ).trigger();">Print Table</a>
Я ожидаю, что файл cookie JSESSIONID не изменится, когда будет создана новая вкладка браузера для печати.
Дополнительная информация: JSESSIONID - это файл cookie, генерируемый контейнерами сервлетов, такими как Tomcat или Jetty, и используемый для управления сеансами. Похоже, что Datatables удаляет cookie при использовании функции печати (которая открывает новое окно браузера).