6

Wymagam ważnej sesji, aby pobrać pliki z mojej aplikacji internetowej.iOS "Dodaj do ekranu głównego" - pobieranie pliku wykopuje użytkownika na zewnątrz

Po uruchomieniu aplikacji internetowej na urządzeniu z systemem iOS, zaloguj się i spróbuj pobrać plik (PDF) z mojej witryny, zostanie wyrzucony, a łącze zostanie otwarte w przeglądarce Safari. Użytkownik musi zalogować się ponownie z Safari, aby pobrać stronę.

Jak mogę wymusić otwarcie pliku w aplikacji internetowej i zamiast tego uruchomić formularz pobierania?

Używam Carrierwave iw sterowniku mam to wywołać pobrania:

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: znalazłem rozwiązanie w połowie pracy, które otwiera plik bezpośrednio w przeglądarce:

$(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 

Korzystając z tego fragmentu kodu, zmuszamy użytkowników iOS do pracy w trybie pełnoekranowym (aplikacja internetowa) do otwierania wszystkich łączy a w aplikacji. Problem polega jednak na tym, że jeśli użytkownik otworzy plik, nie będzie żadnego przycisku "wstecz". A ponieważ użytkownicy iPhone'a nie mają fizycznego przycisku wstecz, będą zmuszeni ponownie uruchomić całą aplikację, aby wydostać się z pokazanego pliku.

+0

Proszę sprawdzić to: https://github.com/MrRio/jsPDF/issues/165 i to http://stackoverflow.com/questions/20978473 – dimakura

Odpowiedz

2

użyć kodu, który pisał, ale zamiast pisać całą zawartość strony do ciała, można wprowadzić go do środka oddzielne div i upewnij się, że znajduje się przycisk „wstecz”, dostępny tylko na urządzeniach z systemem iOS:

$(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

znalazłem rozwiązanie w połowie pracy, które otwiera plik bezpośrednio w przeglądarce:

$(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 

Za pomocą tego fragmentu kodu, możemy zmusić iOS użytkowników działających w pełnoekranowym trybie (web app), aby otworzyć wszystko linki wewnątrz aplikacji. Problem polega jednak na tym, że jeśli użytkownik otworzy plik, nie będzie żadnego przycisku "wstecz". A ponieważ użytkownicy iPhone'a nie mają fizycznego przycisku wstecz, będą zmuszeni ponownie uruchomić całą aplikację, aby wydostać się z pokazanego pliku.