2013-03-11 27 views
2

JS上傳我有這樣的片段:HTML /從相機圖像對iOS6的

<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); 

我使用它在移動應用程式iOS版,從相機捕獲的數據,並顯示在div中預覽。除了第一次在未經允許訪問照片的新設備上加載應用程序(它會在您第一次嘗試拍照時提示)之外,一切正常。

這裏的問題是,當我在用戶批准訪問用戶照片之前呼叫reader.readAsDataURL(f);時,不會觸發reader.onload

是否有任何用戶審覈的監聽器,或者有一種方法可以在頁面加載時提示用戶訪問攝像機?

謝謝

回答

1

我相信這裏的問題是雙重的。

首先,我假設我們正在傾聽<input type="file" />標籤上的某種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); 
}; 

上面,我們消除我們的函數開始,簡單引用f中已有的範圍。除非我們有權限,否則這個函數也不會執行,所以這應該清除你的初始用例問題。