Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在iOS6上从摄像头上传图像的HTML/JS_Javascript_Html_Ios6 - Fatal编程技术网

Javascript 在iOS6上从摄像头上传图像的HTML/JS

Javascript 在iOS6上从摄像头上传图像的HTML/JS,javascript,html,ios6,Javascript,Html,Ios6,我有一段话: <script> var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { // Render thumbnail. var span = document.createElement('span');

我有一段话:

<script>
        var reader = new FileReader();
        reader.onload = (function(theFile) {
            return function(e) {
                // Render thumbnail.
                var span = document.createElement('span');
                span.innerHTML = ['<div id="wrap"><img id="image" class="thumb draggable" src="', e.target.result,
                    '" title="', escape(theFile.name), '" draggable="true" /></div>'].join('');
                document.getElementById('list').insertBefore(span, null);
            };
        })(f);

        // Read in the image file as a data URL.
        reader.readAsDataURL(f);

var reader=new FileReader();
reader.onload=(函数(文件){
返回函数(e){
//渲染缩略图。
var span=document.createElement('span');
span.innerHTML=['').join('');
document.getElementById('list').insertBefore(span,null);
};
})(f) );
//作为数据URL读入图像文件。
reader.readAsDataURL(f);

我正在iOS的移动应用程序中使用它,它可以从摄像头捕获数据并在div中显示预览。除了第一次在未经许可的情况下在新设备上加载应用程序以访问照片外,一切正常(第一次尝试拍照时会提示)

这里的问题是,当我调用
reader.readAsDataURL(f)
在用户批准访问用户照片之前,
reader.onload
不会触发

是否有任何供用户批准的侦听器,或者是否有一种方法可以提示用户在页面加载时访问摄像头


谢谢

我认为这里的问题有两个方面

首先,我假设我们正在侦听
标记上的某种
onchange
事件,该事件调用相机/用户照片,然后调用读取文件的代码。如果没有,我们肯定应该这样做,因为这将等待适当的事件

最后,我们将
f
作为一个参数传递给匿名函数,该函数在某种代码初始阶段返回另一个匿名函数,该函数将成为实际的事件侦听器。问题不在于调用
reader.readAsDataURL(f)处的文件
看到您首先在
reader.onload
中使用
f
作为参数

看到
f
的作用域高于
reader.onload
事件,我们应该能够执行以下操作:

reader.onload = function(e) {
    // Render thumbnail.
    var span = document.createElement('span');
    span.innerHTML =
        ['<div id="wrap"><img id="image" class="thumb draggable" src="',
        e.target.result, '" title="', escape(f.name), // we use f, not theFile
        '" draggable="true" /></div>'].join('');
    document.getElementById('list').insertBefore(span, null);
};
reader.onload=函数(e){
//渲染缩略图。
var span=document.createElement('span');
span.innerHTML=
['')。加入('');
document.getElementById('list').insertBefore(span,null);
};
在上面,我们消除了我们的函数inception,只引用已经在范围内的
f
。除非我们有权限,否则这个函数也不会执行,所以这应该可以解决您最初的用例问题