Я пытаюсь добавить URI типа "данные: приложение" в атрибут <a>
tag href. Это код im, использующий:
var TestFuntion = (function() {
var uri = 'data:application/vnd.xls;base64,'
, template = '<table>{table}</table>'
, base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { ; return c[p]; }) }
return function(table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {worksheet: 'test.xls' || 'Worksheet', table: table.innerHTML}
var x = ( uri + base64(format(template, ctx))).toString();
$('#testLink').attr('href',x)
}
})()
Я попробовал разные способы, используя ссылку setAttribute и link.href, чтобы добавить ссылку, но не удался. Этот пример кода работает в firefox и chrome.
Я думаю, проблема заключается в том, что строка href
которую я пытаюсь добавить, действительно длинна, как 10k+ charecters.
Это ссылка html:
<a id="testLink" download="Test.xls">
У всех веб-браузеров есть ограничения на длительность URL-адреса. Кроме того, у серверов есть и эти. Обычно неприлично длинный URL указывает, что вы пытаетесь использовать GET, когда вы должны выполнять POST.
Если сервер, к которому вы пытаетесь подключиться, является вашим собственным (я предполагаю, что это так), тогда вы должны использовать POST для отправки таких огромных вызовов. Если вам абсолютно необходимо ПОЛУЧИТЬ, я бы переформатировал ваш URL-адрес на пару GUID или что-то в этом роде.