iOS «Добавить на главный экран» — загрузка файла выкидывает пользователя

Мне требуется действующий сеанс, чтобы загружать файлы из моего веб-приложения.

Когда я открываю свое веб-приложение на своем устройстве iOS, вхожу в систему и пытаюсь загрузить файл (PDF) с моего сайта, меня выкидывает, и вместо этого ссылка открывается в Safari. Пользователь должен снова войти в систему из Safari, чтобы загрузить страницу.

Как я могу заставить файл открываться в веб-приложении и вместо этого запускать форму загрузки?

Я использую Carrierwave, и в контроллере у меня есть это, чтобы вызвать загрузку:

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

ОБНОВЛЕНИЕ: я нашел полурабочее решение, которое открывает файл прямо в браузере:

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

Используя этот фрагмент кода, мы заставляем пользователей iOS, работающих в полноэкранном режиме (веб-приложение), открывать все a ссылки внутри приложения. Однако проблема заключается в том, что если пользователь открывает файл, кнопки «назад» не будет. А поскольку у пользователей iPhone отсутствует физическая кнопка «Назад», им придется принудительно перезапустить все приложение, чтобы выйти из отображаемого файла.


person karlingen    schedule 01.09.2015    source источник
comment
Пожалуйста, проверьте это: github.com/MrRio/jsPDF/issues/165 и этот stackoverflow.com/questions/20978473   -  person dimakura    schedule 08.09.2015


Ответы (2)


Используйте код, который вы разместили, но вместо того, чтобы записывать все содержимое страницы в тело, вы можете ввести его в отдельный div и убедиться, что кнопка «назад» доступна только для устройств 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
person CoolTop    schedule 15.09.2015

Я нашел полурабочее решение, которое открывает файл прямо в браузере:

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

Используя этот фрагмент кода, мы заставляем пользователей iOS, работающих в полноэкранном режиме (веб-приложение), открывать все ссылки внутри приложения. Однако проблема заключается в том, что если пользователь открывает файл, кнопки «назад» не будет. А поскольку у пользователей iPhone отсутствует физическая кнопка «Назад», им придется принудительно перезапустить все приложение, чтобы выйти из отображаемого файла.

person karlingen    schedule 14.09.2015