Wie wird der Dialog zum Speichern von Dateien in Safari angezeigt?

Ich brauche Hilfe. Ich habe eine eckige App und möchte mit DocRaptor PDF generieren und als Datei speichern. Ich kann den Dialog zum Speichern von Dateien in Safari jedoch nicht mit einer der Methoden auslösen, die ich bei Stack Overflow gefunden habe. Diese Methoden öffnen eine Datei im aktuellen Browser-Tab und ersetzen die HTML-Seite oder öffnen eine Datei im neuen Tab. Niemand kann den Dialog zeigen. Hier die Beispiele, die ich bereits ausprobiert habe. Umgebung MacOS - EL Capitan. Safari 9.0.3

Lösun # 1

var content = 'file content for example';
var blob = new Blob([ content ], { type : 'text/plain' });
$scope.url = (window.URL || window.webkitURL).createObjectURL( blob );

Beispiel jsfiddle. Zeigt die Datei in der aktuellen Registerkarte an. Ersetzt die Site. Funktioniert aber in Chrome.

Lösun # 2

<a target="_self" href="mysite.com/uploads/ahlem.pdf" download="foo.pdf">

Beispiel jsfiddle. Funktioniert überhaupt nicht in Safari. Funktioniert in Chrome.

Lösun #

<a class="btn" ng-click="saveJSON()" ng-href="{{ url }}">Export to JSON</a>

un

$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();
        };

BeispielCode-Auszu. Zeigt den Dateiinhalt anstelle des HTML-Dokuments an.

Lösun # 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;
}

BeispielCode-Auszu. Ersetzen Sie das Dokument durch den Dateiinhalt in Safari. Funktioniert in Chrome.

Und ähnlicheLösun # 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();
}

Beispiel jsfiddle. Funktioniert überhaupt nicht in Safari. Funktioniert in Chrome.

Auch ich habe versucht, Bibliotheken wie zu verwenden: FileSaver - Es öffnet eine Datei in Safari anstelle eines Dokuments. Sie sollten also auf Cmd + S klicken.Beispie. Wenn wir den Typ 'pplication / octet-stream' verwenden, ist der Name der Datei unbekannt oder es trat der Fehler 'Fehler beim Laden der Ressource: Laden des Frames unterbrochen' auf.Proble.

Zweite Bibliothek Downloadify - funktioniert überhaupt nicht in Safari.Proble.

Angular library nw-fileDialog - Anstatt zu speichern, wie es angezeigt wird, wählen Sie eine Datei.Proble.

DocRaptor hat ein eigenesBeispie mit jQuery. Beispiel mit Winkel in jsfiddle. Es funktioniert in Chrome, aber in Safari funktioniert es nicht, wenn SAMEORIGIN @ fehlerhaft is

Refused to display 'https: //docraptor.com/doc 'in einem Frame, weil' X-Frame-Options 'auf' SAMEORIGIN 'gesetzt wurde.

Aber wenn wir es auf dem Server reproduzieren und die URL auf '@ ändehttps: //docraptor.com/docs.pd 'es funktioniert und öffne die Datei in einem neuen Tab und lade die Datei automatisch herunter, so dass du keinen Ordner auswählen kannst und nach dem Herunterladen dem Benutzer eine weiße leere Bildschirmregisterkarte im Browser angezeigt wird. Wenn wir form target = "_ self" angeben, funktioniert es einwandfrei, aber auf der Konsole wird der Fehler "Fehler beim Laden der Ressource:" angezeigt.

Ich würde mich über jede Hilfe bei diesem Problem freuen. Vielen Dank. Grüße

Antworten auf die Frage(4)

Ihre Antwort auf die Frage