Сохранение html-страницы в .doc работает на firefox, не работает, т.е. - как это исправить? - PullRequest
3 голосов
/ 21 мая 2019

Я впервые пишу здесь, поэтому, пожалуйста, потерпите меня, я постараюсь быть максимально исчерпывающим. В настоящее время я пытаюсь создать в своем коде кнопку, которая при нажатии сохраняет div HTML-страницы (содержащей текст и таблицы) в документе .doc. Я успешно добился этого результата в Firefox, но на т. Е. Кнопка абсолютно ничего не делает.

На ie9 я получаю на консоли «SCRIPT5009:« Blob »non è определенное orbeon-7af471470dd4066fbc9a72c21920d3b8e08edd89.js, ошибка Riga 60 Carattere 7 "- BLOB-объект не определен - строка 60 char 7.

Хотя я знаю, что это больше не поддерживается MS, я как бы застрял в браузерах, поскольку знаю, что некоторые пользователи сайта (на самом деле большинство из них) будут использовать ie9. Кроме того, я застрял в очень старой форме Orbeon, которую я не могу обновить (вздох).

Код, который я написал, прекрасно работает на Firefox 66.0.2 (64-битная версия), но выдает ошибку выше, т.е. на 9.0.8112.16421. Так как я получил вышеупомянутую ошибку, я попытался добавить сценарий Blob.js, так как я думал, что это было проблемой при интерпретации этого, но я получил только полностью «пустую» страницу даже без кнопки. До того, как я добрался до этого полуработающего решения, я также попробовал - filesaver.js html-docx.js и googoose.js. Ничто из этого не помогло мне.

Решение, которое я выбрал, - это файл js

export2doc.js

$("#export").click(function(){
    var preHtml = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'><head><meta charset='utf-8'><title>Export HTML To Doc</title></meta></head><body>";
    var postHtml = "</body></html>";
    var html = preHtml+document.getElementById("tabs-2").innerHTML+postHtml;

    var blob = new Blob(['\ufeff', html], {
        type: 'application/msword'
        });

    // Specify link url
    var url = 'data:application/vnd.ms-word;charset=utf-8,' + encodeURIComponent(html);
    filename='';
    // Specify file name
    filename = filename?filename+'.doc':'document.doc';

    // Create download link element
    var downloadLink = document.createElement("a");

    document.body.appendChild(downloadLink);

    if(navigator.msSaveOrOpenBlob ){
        navigator.msSaveOrOpenBlob(blob, filename);
    }else{
        var blobURL   = URL.createObjectURL(blob);
        // Create a link to the file
        downloadLink.href = url;

        // Setting the file name
        downloadLink.download = filename;

        //triggering the function
        downloadLink.click();
    }

    document.body.removeChild(downloadLink);
});

<xh:head>
...
    <xh:script src="/config/myjs/Export2Doc.js"></xh:script>
...
</xh:head>

<xh:body class="maincontent">
...
<xh:div id="tabsT">
    <xh:div id="tabs-1">
    ...
    </xh:div>
    <xh:div id="tabs-2">
        <xh:table>
            <xh:tr>
                <xh:td>
                 text that can also be a query result returning a text string
                </xh:td>
            </xh:tr>
        </xh:table>
        <br></br>
        <br></br>
        <xh:table>
        ....
        </xh:table>
    </xh:div>

    <xforms:trigger appearance="full" id="export">
    <xforms:label>Esporta in doc</xforms:label>
    </xforms:trigger>
</xh:div>

Не знаю, что или как я могу попытаться заставить его работать на ie9. Я ожидал сэкономить как на FF, так и на IE, так как из того, что я прочитал, msSaveOrOpenBlob должен был позаботиться о части ie ... но не похоже, что она работает, и я совершенно заблудился, как это исправить. Я не против изменить свой код или подход даже полностью, если это позволяет мне выполнить работу: кнопка, которая при нажатии сохраняет вышеупомянутый HTML-div в .doc как на ie, так и на FF. Сейчас кажется, что только часть Firefox работает как задумано. Есть ли способ обойти проблему совместимости BLOB-объектов, так как даже включение blob.js, похоже, не работает? Есть ли другой способ, который может позволить мне сохранить в doc в ie9?

...