iOS“添加到主屏幕” - 文件下载将用户踢出

时间:2015-09-01 13:27:35

标签: ios ruby-on-rails download carrierwave iphone-standalone-web-app

我需要有效的会话才能从我的网络应用程序下载文件。

当我在iOS设备上打开我的网络应用程序,登录并尝试从我的网站下载文件(PDF)时,我被踢出去并在Safari中打开链接。用户必须再次从Safari登录才能下载页面。

如何强制文件在Web应用程序中打开并在那里触发下载表单?

我使用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个链接。但问题是,如果用户打开文件,则不会出现&#34; back&#34; -button。由于iPhone用户缺少物理后退按钮,他们将不得不强制重启整个应用程序以退出显示的文件。

2 个答案:

答案 0 :(得分:2)

使用您发布的代码,但不是将整个页面内容写入正文,您可以在单独的div中输入它,并确保有一个&#34;返回&#34;按钮仅适用于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 :(得分:1)

我找到了半工作解决方案,可直接在浏览器中打开文件:

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

通过使用此代码段,我们强制在全屏模式(Web应用程序)中运行的iOS用户打开应用程序内的所有链接。但问题是,如果用户打开文件,则不会出现“后退”按钮。由于iPhone用户缺少物理后退按钮,因此他们必须强制重启整个应用程序才能退出显示的文件。