Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не сохраняется файл в хроме (https://javascript.ru/forum/misc/64241-ne-sokhranyaetsya-fajjl-v-khrome.html)

АrnowtАА 29.07.2016 11:48

Не сохраняется файл в хроме
 
Код сохранения таблицы html в excel
table = document.getElementById('grid__staticWrapper')
var ctx = {worksheet: "excel" || 'Worksheet', table: table.innerHTML}
window.location.href = ('data:application/vnd.ms-excel,' +  encodeURIComponent(ctx.table));

Были проведены следующие опыты
Так всё работает
ctx.table = ctx.table.substring(0,1000000)

Не работает
ctx.table = ctx.table.substring(0,2000000)

Общая длина 13 млн символов
В консоле ошибок нет. Только в Network пишет status-canseled или data.
В фаерфоксе всё работает.
Господа, есть идеи как решить проблему?

Rise 29.07.2016 12:46

АrnowtАА, есть ограничение на длину URL и в разных браузерах оно разное (возможно даже в версиях этих браузеров). Определи поддержка каких браузеров (версий) нужна, установи какой самый минимальный лимит на data url среди них, дроби таблицу этим лимитом на таблицы, получится несколько файлов увы, вот такая идея есть...

АrnowtАА 29.07.2016 12:47

Rise, Спасибо.
НЕ удобно будет для юзеров

Dilettante_Pro 29.07.2016 18:45

АrnowtАА,
Цитата:

Сообщение от АrnowtАА
Общая длина 13 млн символов

Интересно, кому нужна такая таблица в браузере?

АrnowtАА 02.08.2016 16:12

Решение проблемы.

table = document.getElementById('grid__staticWrapper').innerHTML
var parts = [
        new Blob(['<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>']
        , {type: 'vnd.ms-excel'}),
        table + '</table></body></html>',
        new Uint16Array([33])
      ];

        // Construct a file
        var file = new File(parts, 'integrator.xls', {
            type: "overide/mimetype" // optional - default = ''
        });
        var fr = new FileReader();
            fr.onload = function(){
                $("[data-show = 'excel']").attr("href", URL.createObjectURL(file)).attr("download", file.name).text('Скачать');   
        }
        fr.readAsText(file);
        })


Часовой пояс GMT +3, время: 22:01.