2014-03-07 33 views
0

我試圖編寫一個腳本來檢測用戶何時允許/拒絕使用麥克風,使用getUserMedia API。getUserMedia不會觸發錯誤回調,當您在Firefox中選擇「現在不」時

編輯:我做了一個小提琴向您展示問題:http://jsfiddle.net/4rgRY/

navigator.getUserMedia = navigator.getUserMedia || 
         navigator.webkitGetUserMedia || 
         navigator.mozGetUserMedia || 
         navigator.msGetUserMedia; 

if (navigator.getUserMedia) { 
    navigator.getUserMedia({audio: true, video: false}, function(stream) { 
    console.log('Yayy!'); 
    }, function(err){ 
    console.log("There was an error->: ",err); 
    }); 
} else { 
    console.log('getUserMedia not supported'); 
} 

它工作正常,在Chrome,但,當我試圖在Firefox(27和Firefox每晚30A1),並且您選擇'現在不是',它不會觸發任何回調,無論是成功還是錯誤回調。所以我的應用程序認爲這是允許的,但不能正常工作。

如果您在Firefox中選擇任何其他選項(如「始終分享」,「從不分享」或「不分享」),則工作正常,只需使用「現在不是」選項。

可能是一個Firefox的錯誤?或者是我的代碼有問題?

回答

1

「不是現在」的意思正是它所說的:用戶還沒有決定是否允許還是拒絕。用戶選擇後,他們可以重新打開要求獲得許可的彈出窗口(通過點擊小視頻圖標,如果選擇了該選項,則會出現在左側),並選擇是否允許。

基本上,點擊「現在不行」是完全一樣以下用戶操作:

  1. 在Firefox中,只需點擊該在你的提琴出現的彈出之外。這就取消了彈出窗口,沒有選擇任何選項。
  2. 在Chrome中,只是忽略請求權限的信息條,而沒有點擊任何信息。

和你的代碼應該像處理這些用戶操作一樣處理它。

+0

我在想,那麼有沒有什麼辦法可以檢測用戶是否回答了瀏覽器的彈出窗口?或者像getUserMedia isset一樣? – victorgb6

+0

回答什麼意思? 「不是現在」是用戶明確地決定不回答。 –

+0

基本上來檢測用戶是否有答案,因爲事實上,如果用戶選擇「現在不」,瀏覽器的行爲與用戶拒絕時非常相似。所以如果有辦法檢測這種情況會很好。 – victorgb6

1

我想答案並沒有真正給出。我的應用程序如何檢測用戶決定不作出選擇的事實?不作出選擇意味着我的應用程序將無法訪問相機和麥克風,因此它應該觸發getUserMedia IMO中的錯誤回調。

相關問題