6

Ich benötige eine gültige Sitzung, um Dateien von meiner Web-App herunterladen.iOS "Zum Startbildschirm hinzufügen" - Datei-Download startet Benutzer

Wenn ich meine Web-App auf meinem iOS-Gerät öffne, mich anmelde und versuche, eine Datei (PDF) von meiner Site herunterzuladen, werde ich rausgeschmissen und der Link stattdessen in Safari geöffnet. Der Benutzer muss sich erneut von Safari aus anmelden, um die Seite herunterzuladen.

Wie kann ich erzwingen, dass die Datei in der Web-App geöffnet wird und stattdessen das Download-Formular auslöst?

Ich verwende Carrierwave und in der Steuerung Ich habe diese einen Download auszulösen:

class DocumentsController < ApplicationController 

    # .. code omitted 
    def download 
    if @document.name.file.exists? 
     send_file @document.name.path, x_sendfile: true 
    else 
     redirect_to documents_url, notice: t(:file_not_found) 
    end 
    end 
end 

UPDATE: Ich fand Halbarbeitslösung, die die Datei direkt im Browser öffnet:

$(document).ready -> 
    if 'standalone' of window.navigator and window.navigator.standalone 
    # For iOS Apps 
    $('a').on 'click', (e) -> 
     e.preventDefault() 
     new_location = $(this).attr('href') 
     if new_location != undefined and new_location.substr(0, 1) != '#' and $(this).attr('data-method') == undefined 
     window.location = new_location 
     return 
    return 

Mit diesem Code-Schnipsel erzwingen wir iOS-Benutzer, die im Vollbildmodus (Web-App) ausgeführt werden, alle a Links in der App zu öffnen. Das Problem ist jedoch, dass wenn ein Benutzer eine Datei öffnet, es keinen "Zurück" -Knopf gibt. Und da iPhone-Nutzern eine physische Zurück-Schaltfläche fehlt, müssen sie gezwungen werden, die gesamte App neu zu starten, um aus der angezeigten Datei herauszukommen.

+0

Bitte überprüfen Sie dies: https://github.com/MrRio/jsPDF/issues/165 und das http://stackoverflow.com/questions/20978473 – dimakura

Antwort

2

Verwenden Sie den Code, den Sie geschrieben, sondern die gesamte Seiteninhalt an den Körper des Schreibens, können Sie es in einem separaten div eingeben könnte und stellen Sie sicher, dass es eine Schaltfläche „Zurück“ für iOS-Geräte nur verfügbar:

$(document).ready -> 
    if 'standalone' of window.navigator and window.navigator.standalone 
    # For iOS Apps 
    $('a').on 'click', (e) -> 
     e.preventDefault() 
     new_location = $(this).attr('href') 
     if new_location != undefined and new_location.substr(0, 1) != '#' and $(this).attr('data-method') == undefined 
     window.location = new_location 
     return 
    return 
1

Ich fand Halbarbeitslösung, die die Datei direkt im Browser öffnet:

$(document).ready -> 
    if 'standalone' of window.navigator and window.navigator.standalone 
    # For iOS Apps 
    $('a').on 'click', (e) -> 
     e.preventDefault() 
     new_location = $(this).attr('href') 
     if new_location != undefined and new_location.substr(0, 1) != '#' and $(this).attr('data-method') == undefined 
     window.location = new_location 
     return 
    return 

Durch die Nutzung dieser Code-Snippet, zwingen wir iOS Benutzer im Vollbild-Modus (Web App) läuft ein öffnen alle Links in der App. Das Problem ist jedoch, dass wenn ein Benutzer eine Datei öffnet, es keinen "Zurück" -Knopf gibt. Und da iPhone-Nutzern eine physische Zurück-Schaltfläche fehlt, müssen sie gezwungen werden, die gesamte App neu zu starten, um aus der angezeigten Datei herauszukommen.