在 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
,结果相同。该应用程序是html5
、javascript
、Angular
和Java
后端。我已经在 iPad 上使用iOS 8.3
、8.4
和9 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 中关闭相机的主要内容,如果未能解决你的问题,请参考以下文章
在 ios 7 和 ios9+ 中关闭 ViewController 的异常行为