在 iOS 上的 Fine-uploader 中关闭相机

Posted

技术标签:

【中文标题】在 iOS 上的 Fine-uploader 中关闭相机【英文标题】:Turning camera off in fine-uploader on iOS 【发布时间】:2015-07-20 08:06:29 【问题描述】:

我对精细上传器很陌生;我希望我的问题是相关的......

我正在尝试为 iPad 和 iPhone (ios) 上的 Web 应用用户禁用摄像头,包括 Safari 和 Chrome。我已尝试设置选项camera: ios: false,但相机选项仍显示在 Safari 和 Chrome 中。当我使用workarounds: ios8BrowserCrash: true 时,相机选项确实会在 Chrome 中消失,但仍会在 Safari 中显示。我错过了什么?

我们正在使用fine-uploader 5.1.2,我短暂尝试了5.2.2,结果相同。该应用程序是html5javascriptAngularJava 后端。我已经在 iPad 上使用iOS 8.38.49 beta 进行了测试。

顺便说一句,我尝试禁用相机的原因是由于 iOS 在从相机加载图像时经常崩溃。我发现从设备图像库加载时应用程序崩溃的情况要少得多,绕过相机。这是 iPad/iPhone 的已知问题吗?

提前感谢您的帮助。

【问题讨论】:

如果 multiple 属性 not 出现在文件输入元素上,您将可以访问 iOS 相机。所以,我希望有一些设置会导致 Fine Uploader 将此属性从它创建和包装的文件输入中删除。 【参考方案1】:

谢谢@Ray。作为参考,我现在使用的是最新的FineUploader version 5.3.0。 正如您所建议的那样,multiple 属性已被删除。我追踪到下面的input.removeAttribute("multiple"); 代码(s3.fine-uploader.js):

setMultiple: function(isMultiple, optInput) 
    var input = optInput || this.getInput();

    // Temporary workaround for bug in in iOS8 UIWebView that causes the browser to crash
    // before the file chooser appears if the file input doesn't contain a multiple attribute.
    // See #1283.
    if (options.ios8BrowserCrashWorkaround && qq.ios8() && (qq.iosChrome() || qq.iosSafariWebView())) 
        input.setAttribute("multiple", "");
    

    else 
        if (isMultiple) 
            input.setAttribute("multiple", "");
        
        else 
            input.removeAttribute("multiple");
        
    
,

尽管在我的代码 (ios8BrowserCrash: true) 中将 options.ios8BrowserCrashWorkaround 设置为 true,但在 iPad/Safari 上运行时,该程序仍在执行 removeAttribute("multiple") 代码行。 经过几次尝试和错误,我发现(可能......)库代码缺少对 iPad (iOS 8.3) 上条件 qq.iosSafari() 的测试; qq.iosSafariWebView() 测试不足以检测我 iPad 上的 Safari 浏览器,因此缺少设置了 multiple 属性的代码。 我发现调用代码中的以下选项值解决了这个问题。

function initialiseS3() 
    uploader = new qq.s3.FineUploader(
      element: $element[0],
      template: $(contents)[0],
      debug: false,
// iosEmptyVideos workaround must be false to enable FineUploader to keep multiple:true in iOS
      workarounds: 
                     iosEmptyVideos: false,
                     ios8BrowserCrash: true
                   ,
// Must add the test qq.iosSafari() to set multiple to true and have the camera turned off on iPad
      multiple: qq.ios8() && (qq.iosSafari() || qq.iosChrome() || qq.iosSafariWebView()) ? true : false,
      camera: 
                ios: false
              ,
… (more initialisations)
`

最后一个问题是覆盖解决方法选项 iosEmptyVideos 的默认值并将其设置为 iosEmptyVideos: false 以避免库再次强制 multiple 为 false。我希望这是有道理的……

【讨论】:

qq.iosSafariWebView() 函数似乎按预期工作。如果页面在WebView 内运行,则仅返回true。 “正常”的 Safari 移动浏览器预计不会在此处产生 true 返回值。我们不想将此解决方法应用于“普通”Safari。因此,Fine Uploader 中的代码似乎工作正常。无论您遇到什么问题,都可能是由于您的配置存在问题。

以上是关于在 iOS 上的 Fine-uploader 中关闭相机的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上的软件中关闭 USB 设备

我是不是需要在 Java 中关闭 IO 流? [复制]

在 ios 7 和 ios9+ 中关闭 ViewController 的异常行为

如何在 iOS 8 中关闭两个 UIViewControllers?

如何在 django 中关闭浏览器上的会话

iOS - UITextView 在情节提要中关闭键盘