Как показать диалог сохранения файла в Safari?
Мне нужна помощь. У меня есть угловое приложение и с помощью DocRaptor хочу создать PDF и сохранить его в виде файла. Но я не могу вызвать диалоговое окно для сохранения файла в Safari любым способом, который я нашел в переполнении стека. Эти методы открывают файл в текущей вкладке браузера и заменяют сайт HTML или открывают файл в новой вкладке. Никто не может показать диалог. Вот примеры, которые я уже пытался использовать. Среда MacOS - EL Capitan. Safari 9.0.3
Решение # 1
var content = 'file content for example';
var blob = new Blob([ content ], { type : 'text/plain' });
$scope.url = (window.URL || window.webkitURL).createObjectURL( blob );
примерjsfiddle, Показывает файл в текущей вкладке. Заменяет сайт. Но работает в Chrome.
Решение # 2
<a target="_self" href="mysite.com/uploads/ahlem.pdf" download="foo.pdf">
примерjsfiddle, В Safari не работает вообще. Работает в Chrome.
Решение # 3
<a class="btn" ng-click="saveJSON()" ng-href="{{ url }}">Export to JSON</a>
а также
$scope.saveJSON = function () {
$scope.toJSON = '';
$scope.toJSON = angular.toJson($scope.data);
var blob = new Blob([$scope.toJSON], { type:"application/json;charset=utf-8;" });
var downloadLink = angular.element('<a></a>');
downloadLink.attr('href',window.URL.createObjectURL(blob));
downloadLink.attr('download', 'fileName.json');
downloadLink[0].click();
};
примерФрагмент кода, Показывает содержимое файла вместо html документа.
Решение # 4
function download(text, name, type) {
var a = document.getElementById("a");
var file = new Blob([text], {type: type});
a.href = URL.createObjectURL(file);
a.download = name;
}
примерФрагмент кода, Замените документ содержимым файла в Safari. Работает в Chrome.
И аналогичныеРешение # 5
function download(text, name, type) {
var a = document.createElement("a");
var file = new Blob([text], {type: type});
a.href = URL.createObjectURL(file);
a.download = name;
a.click();
}
примерjsfiddle, В Safari не работает вообще. Работает в Chrome.
Также я попытался использовать библиотеки, такие как:FileSaver - Он открывает файл в Safari вместо документа. Поэтому вы должны нажать Cmd + S.пример, Если мы используем тип «pplication / octet-stream», имя файла будет неизвестно или возникла ошибка «Не удалось загрузить ресурс: загрузка кадра прервана».вопрос.
Вторая библиотекаDownloadify - не работает в Safari вообще.вопрос.
Угловая библиотекаNW-FileDialog - вместо сохранения, как показано, выберите файл.вопрос.
ДокРаптор имеет собственныйпример с помощью jQuery. Пример с угловым вjsfiddle, Он работает в Chrome, но в примере Safari не работает из-за ошибки с SAMEORIGIN
Отказался отображатьhttps://docraptor.com/docs'в кадре, потому что он установил' X-Frame-Options 'на' SAMEORIGIN '.
Но если мы воспроизведем его на сервере и изменим URL на 'https://docraptor.com/docs.pdfОн работает и открывает файл в новой вкладке и автоматически загружает файл, поэтому вы не можете выбрать папку и после загрузки пользователь видит белую пустую вкладку экрана в браузере. Если мы укажем форму target = "_ self", она будет работать идеально, но у консоли будет ошибка "Не удалось загрузить ресурс:".
Я буду признателен за любую помощь с этой проблемой. Благодарю. С уважением.