Я впервые пишу здесь, поэтому, пожалуйста, потерпите меня, я постараюсь быть максимально исчерпывающим. В настоящее время я пытаюсь создать в своем коде кнопку, которая при нажатии сохраняет 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?